diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..b1d2dbdb58 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,22 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{dme,dmf,dmm,dm}] +end_of_line = crlf +indent_style = tab + +[*.md] +trim_trailing_whitespace = false + +[*.py] +indent_style = space +indent_size = 4 + +[*.yml] +indent_style = space +indent_size = 2 \ No newline at end of file diff --git a/.gitattributes b/.gitattributes index 5e9dfae55f..c5587f6042 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,10 +1,16 @@ -# dmm map merger hook -# needs additional setup, see tools/mapmerge/install.txt -# *.dmm merge=merge-dmm - -# dmi icon merger hook -# needs additional setup, see tools/dmitool/merging.txt -*.dmi merge=merge-dmi - -# force changelog merging to use union -html/changelog.html merge=union +## Enforce binary mode +*.dll binary +*.exe binary +*.so binary +*.zip binary + +# dmm map merger hook +# needs additional setup, see tools/mapmerge/install.txt +# *.dmm merge=merge-dmm + +# dmi icon merger hook +# needs additional setup, see tools/dmitool/merging.txt +*.dmi merge=merge-dmi + +# force changelog merging to use union +html/changelog.html merge=union diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 4e64cf6ff7..fb33f2fafb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -81,6 +81,12 @@ Then in our `handle_grabs_ch()` proc, if we want to avoid performing the stock g * Reference issues and pull requests liberally. * Use the GitHub magic words "Fixed/Fixes/Fix, Resolved/Resolves/Resolve, Closed/Closes/Close", as in, "Closes #1928", as this will automatically close that issue when the PR is merged if it is a fix for that issue. +### Early porting + +* You may earlyport. +* Follow standard chompcomments incase upstream ends up closing their PR for any reason. +* If it does get merged upstream and the mirror appears on our repo, you are responsible for unfucking the comments situation, because it'll have to say VORE edits instead of CHOMP edits. + ## Licensing CHOMPStation is licensed under the GNU Affero General Public License version 3, which can be found in full in LICENSE-AGPL3.txt. diff --git a/.github/ISSUE_TEMPLATE/map_report.md b/.github/ISSUE_TEMPLATE/map_report.md new file mode 100644 index 0000000000..a3aa174357 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/map_report.md @@ -0,0 +1,29 @@ +--- +name: Map Bug report +about: Create a report, specific to any map related things. +title: '[MAPPING] ' +labels: ['Type: Bug', 'Type: Map'] +assignees: '' + +--- + + + + + + +#### Brief description of the bug + + +#### What you expected to happen + + +#### What actually happened + + +#### Code Revision +- (Found using the "Show Server Revision" verb under the OOC tab.) + + +#### Anything else you may wish to add: +- (Location if it's a mapping issue, screenshots, sprites, etc.) diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..9d69be5ecb --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 + +updates: + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: "daily" + - package-ecosystem: npm + directory: "/tools" + schedule: + interval: "daily" diff --git a/.github/workflows/autochangelog.yml b/.github/workflows/autochangelog.yml index 71a53a5b2d..cb6ecabe46 100644 --- a/.github/workflows/autochangelog.yml +++ b/.github/workflows/autochangelog.yml @@ -1,43 +1,43 @@ name: Autochangelog -on: - pull_request_target: - types: closed - branches: - - master - +on: + pull_request_target: + types: closed + branches: + - master + env: - BASENAME: "polaris" + BASENAME: "vorestation" jobs: - autochangelog: - name: Autochangelog - runs-on: ubuntu-20.04 - if: github.event.pull_request.merged == true - steps: - - uses: /actions/checkout@v2 - with: - ref: master - - name: Update repository to master - run: git pull "origin" master - - name: Ensure +x on CI directory - run: | - chmod -R +x ./tools/ci - - uses: actions/setup-python@v2 - with: - python-version: '3.7' - - name: Generate Changelog - run: | - pip install pyyaml - python tools/GenerateChangelog/ss13_autochangelog.py \ - html/changelogs \ - ${{ github.event.pull_request.number }} \ - "${{ github.event.pull_request.user.login }}" \ - "${{ github.event.pull_request.body }}" - python tools/GenerateChangelog/ss13_genchangelog.py \ - html/changelog.html \ - html/changelogs - - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: Automatic changelog generation for ${{ github.events.pull_request.number }} - branch: ${{ github.events.pull_request.base }} - commit_user_name: Autochangelog Bot + autochangelog: + name: Autochangelog + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true + steps: + - uses: /actions/checkout@v3 + with: + ref: master + - name: Update repository to master + run: git pull "origin" master + - name: Ensure +x on CI directory + run: | + chmod -R +x ./tools/ci + - uses: actions/setup-python@v4 + with: + python-version: '3.7' + - name: Generate Changelog + run: | + pip install pyyaml + python tools/GenerateChangelog/ss13_autochangelog.py \ + html/changelogs \ + ${{ github.event.pull_request.number }} \ + "${{ github.event.pull_request.user.login }}" \ + "${{ github.event.pull_request.body }}" + python tools/GenerateChangelog/ss13_genchangelog.py \ + html/changelog.html \ + html/changelogs + - uses: stefanzweifel/git-auto-commit-action@v4 + with: + commit_message: Automatic changelog generation for ${{ github.events.pull_request.number }} + branch: ${{ github.events.pull_request.base }} + commit_user_name: Autochangelog Bot diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 13bddb2a37..c531d1ffd9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,58 +10,68 @@ env: jobs: file_tests: name: Run Linters - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Ensure +x on CI directory run: | chmod -R +x ./tools/ci - name: Install Tools run: | bash tools/ci/install_build_deps.sh + - name: Restore Yarn cache + if: "${{ contains(github.event.pull_request.labels.*.name, 'Type: TGUI Bundle') }}" + uses: actions/cache@v3 + with: + path: tgui/.yarn/cache + key: ${{ runner.os }}-yarn-${{ secrets.CACHE_PURGE_KEY }}-${{ hashFiles('tgui/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-build-${{ secrets.CACHE_PURGE_KEY }}- + ${{ runner.os }}-build- + ${{ runner.os }}- - name: Run Tests run: | tools/ci/validate_files.sh tools/ci/build_tgui.sh -# dreamchecker: -# name: DreamChecker -# runs-on: ubuntu-20.04 -# steps: -# - uses: actions/checkout@v2 -# -# - name: Cache SpacemanDMM -# uses: actions/cache@v2 -# with: -# path: ~/SpacemanDMM -# key: ${{ runner.os }}-dreamchecker-${{ hashFiles('dependencies.sh')}} -# restore-keys: ${{ runner.os }}-dreamchecker -# -# - name: Install Dependencies -# run: | -# tools/ci/install_spaceman_dmm.sh dreamchecker -# -# - name: Run Linter -# id: linter -# run: | -# ~/dreamchecker > ${GITHUB_WORKSPACE}/output-annotations.txt 2>&1 -# -# - name: Annotate Linter -# uses: yogstation13/DreamAnnotate@v1 -# if: always() -# with: -# outputFile: output-annotations.txt + dreamchecker: + name: DreamChecker + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Cache SpacemanDMM + uses: actions/cache@v3 + with: + path: ~/SpacemanDMM + key: ${{ runner.os }}-dreamchecker-${{ hashFiles('dependencies.sh')}} + restore-keys: ${{ runner.os }}-dreamchecker + + - name: Install Dependencies + run: | + tools/ci/install_spaceman_dmm.sh dreamchecker + + - name: Run Linter + id: linter + run: | + ~/dreamchecker > ${GITHUB_WORKSPACE}/output-annotations.txt 2>&1 + + - name: Annotate Linter + uses: yogstation13/DreamAnnotate@v1 + if: always() + with: + outputFile: output-annotations.txt unit_tests: name: Integration Tests - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Ensure +x on CI directory run: | chmod -R +x ./tools/ci - name: Setup Cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: $HOME/BYOND key: ${{ runner.os }}-byond @@ -79,7 +89,7 @@ jobs: TEST_DEFINE: "UNIT_TEST" TEST_FILE: "code/_unit_tests.dm" RUN: "1" - - name: Compile POIs (no run) + - name: Compile POIs run: | tools/ci/install_byond.sh tools/ci/compile_and_run.sh @@ -87,7 +97,7 @@ jobs: TEST_DEFINE: "MAP_TEST" TEST_FILE: "code/_map_tests.dm" RUN: "0" - - name: Compile away missions (no run) + - name: Compile away missions run: | tools/ci/install_byond.sh tools/ci/compile_and_run.sh diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml index fd5536ea48..57f305772c 100644 --- a/.github/workflows/render_nanomaps.yml +++ b/.github/workflows/render_nanomaps.yml @@ -14,10 +14,10 @@ on: jobs: generate_maps: name: 'Generate NanoMaps' - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Clone - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Branch run: | diff --git a/.gitignore b/.gitignore index 04e3bdf8d7..282f3eabf8 100644 --- a/.gitignore +++ b/.gitignore @@ -22,31 +22,10 @@ cfg/ !/.vscode/settings.json !/.vscode/tasks.json -ch-merge-upstream-pull-request.sh code/game/gamemodes/technomancer/spells/projectile/overload.dm code/game/gamemodes/technomancer/spells/projectile/overload.dm code/modules/client/preference_setup/loadout/loadout_xeno.dm temp.dmi -/maps/RandomZLevels/backup/blackmarketpackers.dmm -/maps/backup/virgo-1.dmm -/maps/backup/virgo-2.dmm -/tools/midi2piano/.vs/midi2piano/v14/.suo -/tools/midi2piano/midi2piano/bin/x86/Debug/Sanford.Multimedia.Midi.dll -/tools/midi2piano/midi2piano/bin/x86/Debug/midi2piano.exe -/tools/midi2piano/midi2piano/bin/x86/Debug/midi2piano.pdb -/tools/midi2piano/midi2piano/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache -/tools/midi2piano/midi2piano/obj/x86/Debug/midi2piano.Form1.resources -/tools/midi2piano/midi2piano/obj/x86/Debug/midi2piano.csproj.FileListAbsolute.txt -/tools/midi2piano/midi2piano/obj/x86/Debug/midi2piano.csproj.GenerateResource.Cache -/tools/midi2piano/midi2piano/obj/x86/Debug/midi2piano.csprojResolveAssemblyReference.cache -/tools/midi2piano/midi2piano/obj/x86/Debug/midi2piano.exe -/tools/midi2piano/midi2piano/obj/x86/Debug/midi2piano.pdb -/maps/backup -/maps/original -/maps/RandomZLevels/backup -/tools/midi2piano.zip -/maps/yw/backup -icons/mecha/mecha_ch.dmi - -.vscode/settings.json +node_modules/ +package-lock.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 19a0ceb7de..4b96db2f5a 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -9,6 +9,7 @@ "dbaeumer.vscode-eslint", "editorconfig.editorconfig", "donkie.vscode-tgstation-test-adapter", - "icrawl.discord-vscode" + "icrawl.discord-vscode", + "esbenp.prettier-vscode" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 64cfc2bb26..8e110ef9bd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,8 +1,7 @@ { "eslint.nodePath": "./tgui/.yarn/sdks", - "eslint.workingDirectories": [ - "./tgui" - ], + "eslint.workingDirectories": ["./tgui"], + "prettier.prettierPath": "./tgui/.yarn/sdks/prettier/index.js", "typescript.tsdk": "./tgui/.yarn/sdks/typescript/lib", "typescript.enablePromptUseWorkspaceTsdk": true, "search.exclude": { @@ -13,24 +12,63 @@ "*.dmi": "imagePreview.previewEditor" }, "files.eol": "\n", + "files.encoding": "utf8", + "files.insertFinalNewline": true, + "files.trimFinalNewlines": true, + "files.trimTrailingWhitespace": true, + "files.associations": { + "*.{dme,dmf,dmm,dm}": "dm", + }, "gitlens.advanced.blame.customArguments": [ - "-w" + "-w", "--ignore-revs-file", ".git-blame-ignore-revs" ], "tgstationTestExplorer.project.resultsType": "json", + "[dm]": { + "files.eol": "\r\n", + "editor.detectIndentation": false, + "editor.insertSpaces": false + }, + "[markdown]": { + "files.trimTrailingWhitespace": false + }, + "[python]": { + "editor.detectIndentation": false, + "editor.insertSpaces": true, + "editor.tabSize": 4 + }, + "[yaml]": { + "editor.detectIndentation": false, + "editor.insertSpaces": true, + "editor.tabSize": 2 + }, "[javascript]": { - "editor.rulers": [ - 120 - ] + "editor.rulers": [120], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[javascriptreact]": { + "editor.rulers": [120], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true }, "[typescript]": { - "editor.rulers": [ - 120 - ] + "editor.rulers": [120], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[typescriptreact]": { + "editor.rulers": [120], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true }, "[scss]": { - "editor.rulers": [ - 120 - ] + "editor.rulers": [120], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true }, + "debug.onTaskErrors": "abort", + "dreammaker.objectTreePane": true, + "dreammaker.autoUpdate": true, + "dreammaker.tickOnCreate": true, "tgstationTestExplorer.project.DMEName": "tgmc.dme" -} \ No newline at end of file +} diff --git a/code/__defines/belly_modes_ch.dm b/code/__defines/belly_modes_ch.dm index e4b04aa87a..e1bb06b753 100644 --- a/code/__defines/belly_modes_ch.dm +++ b/code/__defines/belly_modes_ch.dm @@ -7,3 +7,8 @@ #define DM_FLAG_REAGENTSDIGEST 0x2 #define DM_FLAG_REAGENTSABSORB 0x4 #define DM_FLAG_REAGENTSDRAIN 0x8 + +//Vore Sprite Flags +#define DM_FLAG_VORESPRITE_BELLY 0x1 +#define DM_FLAG_VORESPRITE_TAIL 0x2 +#define DM_FLAG_VORESPRITE_MARKING 0x4 \ No newline at end of file diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm index 2d5ba3e308..2d8f714fc4 100644 --- a/code/__defines/belly_modes_vr.dm +++ b/code/__defines/belly_modes_vr.dm @@ -1,4 +1,5 @@ // Normal digestion modes +#define DM_DEFAULT "Default" // Not a real bellymode, used for handling on 'selective' bellymode prefs. #define DM_HOLD "Hold" #define DM_HOLD_ABSORBED "Hold Absorbed" // Not a real bellymode, used for handling different idle messages for absorbed prey. #define DM_DIGEST "Digest" @@ -10,6 +11,7 @@ #define DM_SIZE_STEAL "Size Steal" #define DM_HEAL "Heal" #define DM_EGG "Encase In Egg" +#define DM_SELECT "Selective" //Addon mode flags #define DM_FLAG_NUMBING 0x1 diff --git a/code/__defines/machinery.dm b/code/__defines/machinery.dm index 8a27e7c4c4..9d882883a4 100644 --- a/code/__defines/machinery.dm +++ b/code/__defines/machinery.dm @@ -79,7 +79,6 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called #define NETWORK_ALARM_FIRE "Fire Alarms" #define NETWORK_TALON_HELMETS "TalonHelmets" //VOREStation Add #define NETWORK_TALON_SHIP "TalonShip" //VOREStation Add -#define NETWORK_EXPLORATION "Exploration" // Those networks can only be accessed by pre-existing terminals. AIs and new terminals can't use them. var/list/restricted_camera_networks = list(NETWORK_ERT,NETWORK_MERCENARY,"Secret", NETWORK_COMMUNICATORS, NETWORK_EXPLORATION) @@ -174,3 +173,17 @@ if (!(DATUM.datum_flags & DF_ISPROCESSING)) {\ #define LOGIN_TYPE_NORMAL 1 #define LOGIN_TYPE_AI 2 #define LOGIN_TYPE_ROBOT 3 + +// Computer Hardware +#define PART_CPU /obj/item/weapon/computer_hardware/processor_unit // CPU. Without it the computer won't run. Better CPUs can run more programs at once. +#define PART_NETWORK /obj/item/weapon/computer_hardware/network_card // Network Card component of this computer. Allows connection to NTNet +#define PART_HDD /obj/item/weapon/computer_hardware/hard_drive // Hard Drive component of this computer. Stores programs and files. + +// Optional hardware (improves functionality, but is not critical for computer to work in most cases) +#define PART_BATTERY /obj/item/weapon/computer_hardware/battery_module // An internal power source for this computer. Can be recharged. +#define PART_CARD /obj/item/weapon/computer_hardware/card_slot // ID Card slot component of this computer. Mostly for HoP modification console that needs ID slot for modification. +#define PART_PRINTER /obj/item/weapon/computer_hardware/nano_printer // Nano Printer component of this computer, for your everyday paperwork needs. +//#define PART_DRIVE /obj/item/weapon/computer_hardware/hard_drive/portable // Portable data storage +//#define PART_AI /obj/item/weapon/computer_hardware/ai_slot // AI slot, an intellicard housing that allows modifications of AIs. +#define PART_TESLA /obj/item/weapon/computer_hardware/tesla_link // Tesla Link, Allows remote charging from nearest APC. +//#define PART_SCANNER /obj/item/weapon/computer_hardware/scanner // One of several optional scanner attachments. diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index db25cb850e..fb0e4ecd51 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -149,10 +149,25 @@ #define PROGRAM_STATE_BACKGROUND 1 #define PROGRAM_STATE_ACTIVE 2 +#define PROG_MISC "Miscellaneous" +#define PROG_ENG "Engineering" +#define PROG_OFFICE "Office Work" +#define PROG_COMMAND "Command" +#define PROG_SUPPLY "Supply and Shuttles" +#define PROG_ADMIN "NTNet Administration" +#define PROG_UTIL "Utility" +#define PROG_SEC "Security" +#define PROG_MONITOR "Monitoring" + // Caps for NTNet logging. Less than 10 would make logging useless anyway, more than 500 may make the log browser too laggy. Defaults to 100 unless user changes it. #define MAX_NTNET_LOGS 500 #define MIN_NTNET_LOGS 10 +//Built-in email accounts +#define EMAIL_DOCUMENTS "document.server@virgo.local" +#define EMAIL_SYSADMIN "admin@virgo.local" +#define EMAIL_BROADCAST "broadcast@virgo.local" + // Special return values from bullet_act(). Positive return values are already used to indicate the blocked level of the projectile. #define PROJECTILE_CONTINUE -1 //if the projectile should continue flying after calling bullet_act() diff --git a/code/__defines/misc_vr.dm b/code/__defines/misc_vr.dm index 9a9d7ba3f4..4d1aba706e 100644 --- a/code/__defines/misc_vr.dm +++ b/code/__defines/misc_vr.dm @@ -58,6 +58,7 @@ #define PTO_CARGO "Cargo" #define PTO_CIVILIAN "Civilian" #define PTO_CYBORG "Cyborg" +#define PTO_TALON "Talon Contractor" #define DEPARTMENT_TALON "ITV Talon" diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index be17f09c39..51c65f532b 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -25,6 +25,7 @@ #define SPECIES_PROTEAN "Protean" #define SPECIES_RAPALA "Rapala" #define SPECIES_SERGAL "Sergal" +#define SPECIES_ALTEVIAN "Altevian" #define SPECIES_SHADEKIN_CREW "Black-Eyed Shadekin" #define SPECIES_VASILISSAN "Vasilissan" #define SPECIES_VULPKANIN "Vulpkanin" diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index f81e48b044..b133acc9ec 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -86,18 +86,15 @@ #define LANGUAGE_ROOTLOCAL "Local Rootspeak" #define LANGUAGE_ROOTGLOBAL "Global Rootspeak" #define LANGUAGE_CULT "Cult" -#define LANGUAGE_OCCULT "Occult" #define LANGUAGE_CHANGELING "Changeling" #define LANGUAGE_VOX "Vox-Pidgin" #define LANGUAGE_TERMINUS "Terminus" -#define LANGUAGE_SKRELLIANFAR "High Skrellian" #define LANGUAGE_MINBUS "Minbus" #define LANGUAGE_EVENT1 "Occursus" #define LANGUAGE_AKHANI "Akhani" #define LANGUAGE_ALAI "Alai" #define LANGUAGE_ZADDAT "Vedahq" #define LANGUAGE_PROMETHEAN "Promethean Biolinguistics" -#define LANGUAGE_BLOB "Chemosense Transmission" #define LANGUAGE_GIBBERISH "Babel" // Language flags. diff --git a/code/__defines/species_languages_vr.dm b/code/__defines/species_languages_vr.dm index 1a5fbdab4c..b8f3ed3429 100644 --- a/code/__defines/species_languages_vr.dm +++ b/code/__defines/species_languages_vr.dm @@ -1,7 +1,7 @@ #define SPECIES_WHITELIST_SELECTABLE 0x20 // Can select and customize, but not join as #define LANGUAGE_DRUDAKAR "D'Rudak'Ar" -#define LANGUAGE_SLAVIC "Pan-Slavic" +#define LANGUAGE_SLAVIC "Pan-Slavic" //CHOMP reAdd #define LANGUAGE_BIRDSONG "Birdsong" #define LANGUAGE_SAGARU "Sagaru" #define LANGUAGE_CANILUNZT "Canilunzt" @@ -10,13 +10,9 @@ #define LANGUAGE_ENOCHIAN "Enochian" #define LANGUAGE_VESPINAE "Vespinae" #define LANGUAGE_SPACER "Spacer" -#define LANGUAGE_CLOWNISH "Coulrian" #define LANGUAGE_TAVAN "Tavan" #define LANGUAGE_ECHOSONG "Echo Song" -#define LANGUAGE_CHIMPANZEE "Chimpanzee" -#define LANGUAGE_NEAERA "Neaera" -#define LANGUAGE_STOK "Stok" -#define LANGUAGE_FARWA "Farwa" +#define LANGUAGE_ANIMAL "Animal" #define LANGUAGE_SHADEKIN "Shadekin Empathy" diff --git a/code/__defines/sprite_sheets.dm b/code/__defines/sprite_sheets.dm index 603bb82d5f..2194efca23 100644 --- a/code/__defines/sprite_sheets.dm +++ b/code/__defines/sprite_sheets.dm @@ -11,7 +11,8 @@ SPECIES_SERGAL = 'icons/inventory/suit/mob_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/suit/mob_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/suit/mob_vr_altevian.dmi') #define VR_SPECIES_SPRITE_SHEETS_HEAD_MOB list(\ SPECIES_HUMAN = 'icons/inventory/head/mob.dmi',\ SPECIES_TAJ = 'icons/inventory/head/mob_tajaran.dmi',\ @@ -24,7 +25,8 @@ SPECIES_SERGAL = 'icons/inventory/head/mob_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/head/mob_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/head/mob_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/head/mob_vr_altevian.dmi') #define VR_SPECIES_SPRITE_SHEETS_HANDS_MOB list(\ SPECIES_HUMAN = 'icons/inventory/hands/mob.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/mob_tajaran.dmi',\ @@ -64,7 +66,8 @@ SPECIES_SERGAL = 'icons/inventory/suit/item_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/suit/item_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/suit/item_vr_altevian.dmi') #define VR_SPECIES_SPRITE_SHEETS_HEAD_ITEM list(\ SPECIES_HUMAN = 'icons/inventory/head/item.dmi',\ SPECIES_TAJ = 'icons/inventory/head/item_tajaran.dmi',\ @@ -77,7 +80,8 @@ SPECIES_SERGAL = 'icons/inventory/head/item_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/head/item_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/head/item_vr_altevian.dmi') #define VR_SPECIES_SPRITE_SHEETS_HANDS_ITEM list(\ SPECIES_HUMAN = 'icons/inventory/hands/item.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/item_tajaran.dmi',\ @@ -118,7 +122,8 @@ SPECIES_SERGAL = 'icons/inventory/suit/mob_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/suit/mob_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/suit/mob_vr_altevian.dmi') #define ALL_VR_SPRITE_SHEETS_HEAD_MOB list(\ SPECIES_HUMAN = 'icons/inventory/head/mob_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/head/mob_vr_tajaran.dmi',\ @@ -131,7 +136,8 @@ SPECIES_SERGAL = 'icons/inventory/head/mob_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/head/mob_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/head/mob_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/head/mob_vr_altevian.dmi') #define ALL_VR_SPRITE_SHEETS_HANDS_MOB list(\ SPECIES_HUMAN = 'icons/inventory/hands/mob_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/mob_vr_tajaran.dmi',\ @@ -171,7 +177,8 @@ SPECIES_SERGAL = 'icons/inventory/suit/item_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/suit/item_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/suit/item_vr_altevian.dmi') #define ALL_VR_SPRITE_SHEETS_HEAD_ITEM list(\ SPECIES_HUMAN = 'icons/inventory/head/item_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/head/item_vr_tajaran.dmi',\ @@ -184,7 +191,8 @@ SPECIES_SERGAL = 'icons/inventory/head/item_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/head/item_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/head/item_vr_altevian.dmi') #define ALL_VR_SPRITE_SHEETS_HANDS_ITEM list(\ SPECIES_HUMAN = 'icons/inventory/hands/item_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/item_vr_tajaran.dmi',\ diff --git a/code/_helpers/_lists.dm b/code/_helpers/_lists.dm index c359227f05..5631fa8807 100644 --- a/code/_helpers/_lists.dm +++ b/code/_helpers/_lists.dm @@ -53,7 +53,7 @@ // atoms/items/objects can be pretty and whatnot var/atom/A = item if(output_icons && isicon(A.icon) && !ismob(A)) // mobs tend to have unusable icons - item_str += "[bicon(A)] " + item_str += "\icon[A][bicon(A)] " switch(determiners) if(DET_NONE) item_str += A.name if(DET_DEFINITE) item_str += "\the [A]" @@ -217,6 +217,17 @@ This actually tests if they have the same entries and values. return 0 return 1 +/* +Checks if a list has the same entries and values as an element of big. +*/ +/proc/in_as_list(var/list/little, var/list/big) + if(!islist(big)) + return 0 + for(var/element in big) + if(same_entries(little, element)) + return 1 + return 0 + /* * Returns list containing entries that are in either list but not both. * If skipref = 1, repeated elements are treated as one. @@ -870,4 +881,3 @@ var/global/list/json_cache = list() else used_key_list[input_key] = 1 return input_key - \ No newline at end of file diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 8088eaa5e1..94bfbbc232 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -5,8 +5,10 @@ var/global/list/hair_accesories_list= list()// Stores /datum/sprite_accessory/hair_accessory indexed by type var/global/list/negative_traits = list() // Negative custom species traits, indexed by path var/global/list/neutral_traits = list() // Neutral custom species traits, indexed by path -var/global/list/everyone_traits = list() // Neutral traits available to all species, indexed by path var/global/list/positive_traits = list() // Positive custom species traits, indexed by path +var/global/list/everyone_traits_positive = list() // Neutral traits available to all species, indexed by path +var/global/list/everyone_traits_neutral = list() // Neutral traits available to all species, indexed by path +var/global/list/everyone_traits_negative = list() // Neutral traits available to all species, indexed by path var/global/list/traits_costs = list() // Just path = cost list, saves time in char setup var/global/list/all_traits = list() // All of 'em at once (same instances) var/global/list/active_ghost_pods = list() @@ -63,6 +65,7 @@ var/global/list/classic_vore_sounds = list( "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Zipper" = 'sound/items/zip.ogg', "None" = null) var/global/list/classic_release_sounds = list( @@ -71,6 +74,7 @@ var/global/list/classic_release_sounds = list( "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Zipper" = 'sound/items/zip.ogg', "Splatter" = 'sound/effects/splat.ogg', "None" = null ) @@ -93,6 +97,7 @@ var/global/list/fancy_vore_sounds = list( "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Zipper" = 'sound/items/zip.ogg', "None" = null ) @@ -102,6 +107,7 @@ var/global/list/fancy_release_sounds = list( "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Zipper" = 'sound/items/zip.ogg', "Stomach Move" = 'sound/vore/sunesound/pred/stomachmove.ogg', "Pred Escape" = 'sound/vore/sunesound/pred/escape.ogg', "Splatter" = 'sound/effects/splat.ogg', @@ -254,7 +260,8 @@ var/global/list/edible_trash = list(/obj/item/broken_device, /obj/item/weapon/folder, /obj/item/weapon/clipboard, /obj/item/weapon/coin, - /obj/item/clothing/ears //chompstation addition end + /obj/item/clothing/ears, //chompstation addition end + //CHOMPedit: disabled because this is in a file we don't use /obj/item/roulette_ball ) var/global/list/contamination_flavors = list( @@ -563,12 +570,16 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, switch(category) if(-INFINITY to -0.1) negative_traits[traitpath] = T + if(!(T.custom_only)) + everyone_traits_negative[traitpath] = T if(0) neutral_traits[traitpath] = T if(!(T.custom_only)) - everyone_traits[traitpath] = T + everyone_traits_neutral[traitpath] = T if(0.1 to INFINITY) positive_traits[traitpath] = T + if(!(T.custom_only)) + everyone_traits_positive[traitpath] = T // Weaver recipe stuff @@ -838,4 +849,4 @@ var/global/list/xenobio_rainbow_extracts = list( /obj/item/slime_extract/ruby = 3, /obj/item/slime_extract/emerald = 3, /obj/item/slime_extract/light_pink = 1, - /obj/item/slime_extract/rainbow = 1) \ No newline at end of file + /obj/item/slime_extract/rainbow = 1) diff --git a/code/_helpers/sanitize_values.dm b/code/_helpers/sanitize_values.dm index 4b521f9bfb..3d04200269 100644 --- a/code/_helpers/sanitize_values.dm +++ b/code/_helpers/sanitize_values.dm @@ -6,6 +6,16 @@ return number return default +// Checks if the given input is a valid list index; returns true/false and doesn't change anything. +/proc/is_valid_index(input, list/given_list) + if(!isnum(input)) + return FALSE + if(input != round(input)) + return FALSE + if(input < 1 || input > length(given_list)) + return FALSE + return TRUE + /proc/sanitize_text(text, default="") if(istext(text)) return text @@ -44,3 +54,60 @@ if(65 to 70) . += ascii2text(ascii+32) //letters A to F - translates to lowercase else return default return . + +//Valid format codes: YY, YEAR, MM, DD, hh, mm, ss, :, -. " " (space). Invalid format will return default. +/proc/sanitize_time(time, default, format = "hh:mm") + if(!istext(time) || !(length(time) == length(format))) + return default + var/fragment = "" + . = list() + for(var/i = 1, i <= length(format), i++) + fragment += copytext(format,i,i+1) + if(fragment in list("YY", "YEAR", "MM", "DD", "hh", "mm", "ss")) + . += sanitize_one_time(copytext(time, i - length(fragment) + 1, i + 1), copytext(default, i - length(fragment) + 1, i + 1), fragment) + fragment = "" + else if(fragment in list(":", "-", " ")) + . += fragment + fragment = "" + if(fragment) + return default //This means the format was improper. + return JOINTEXT(.) + +//Internal proc, expects valid format and text input of equal length to format. +/proc/sanitize_one_time(input, default, format) + var/list/ainput = list() + for(var/i = 1, i <= length(input), i++) + ainput += text2ascii(input, i) + switch(format) + if("YY") + if(!(ainput[1] in 48 to 57) || !(ainput[2] in 48 to 57))//0 to 9 + return (default || "00") + return input + if("YEAR") + for(var/i = 1, i <= 4, i++) + if(!(ainput[i] in 48 to 57))//0 to 9 + return (default || "0000") + return input + if("MM") + var/early = (ainput[1] == 48) && (ainput[2] in 49 to 57) //01 to 09 + var/late = (ainput[1] == 49) && (ainput[2] in 48 to 50) //10 to 12 + if(!(early || late)) + return (default || "01") + return input + if("DD") + var/early = (ainput[1] == 48) && (ainput[2] in 49 to 57) //01 to 09 + var/mid = (ainput[1] in 49 to 50) && (ainput[2] in 48 to 57) //10 to 29 + var/late = (ainput[1] == 51) && (ainput[2] in 48 to 49) //30 to 31 + if(!(early || mid || late)) + return (default || "01") + return input + if("hh") + var/early = (ainput[1] in 48 to 49) && (ainput[2] in 48 to 57) //00 to 19 + var/late = (ainput[1] == 50) && (ainput[2] in 48 to 51) //20 to 23 + if(!(early || late)) + return (default || "00") + return input + if("mm", "ss") + if(!(ainput[1] in 48 to 53) || !(ainput[2] in 48 to 57)) //0 to 5, 0 to 9 + return (default || "00") + return input diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 85ec20087f..e2bc37d93c 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -345,8 +345,15 @@ if(!text_tag_cache[tagname]) var/icon/tag = icon(text_tag_icons, tagname) text_tag_cache[tagname] = bicon(tag, TRUE, "text_tag") + if(C.chatOutput.broken) + return "[tagdesc]" return text_tag_cache[tagname] +/proc/create_text_tag_old(var/tagname, var/tagdesc = tagname, var/client/C = null) + if(!(C && C.is_preference_enabled(/datum/client_preference/chat_tags))) + return tagdesc + return "[tagdesc]" + /proc/contains_az09(var/input) for(var/i=1, i<=length(input), i++) var/ascii_char = text2ascii(input,i) @@ -410,6 +417,58 @@ t = replacetext(t, "\[editorbr\]", "") return t +//pencode translation to html for tags exclusive to digital files (currently email, nanoword, report editor fields, +//modular scanner data and txt file printing) and prints from them +/proc/digitalPencode2html(var/text) + text = replacetext(text, "\[pre\]", "
")
+	text = replacetext(text, "\[/pre\]", "
") + text = replacetext(text, "\[fontred\]", "") // to pass html tag integrity unit test + text = replacetext(text, "\[fontblue\]", "")// to pass html tag integrity unit test + text = replacetext(text, "\[fontgreen\]", "") + text = replacetext(text, "\[/font\]", "") + text = replacetext(text, "\[redacted\]", "R E D A C T E D") + return pencode2html(text) + +//Will kill most formatting; not recommended. +/proc/html2pencode(t) + t = replacetext(t, "
", "\[pre\]")
+	t = replacetext(t, "
", "\[/pre\]") + t = replacetext(t, "", "\[fontred\]")// to pass html tag integrity unit test + t = replacetext(t, "", "\[fontblue\]")// to pass html tag integrity unit test + t = replacetext(t, "", "\[fontgreen\]") + t = replacetext(t, "", "\[/font\]") + t = replacetext(t, "
", "\[br\]") + t = replacetext(t, "
", "\[br\]") + t = replacetext(t, "", "\[b\]") + t = replacetext(t, "", "\[/b\]") + t = replacetext(t, "", "\[i\]") + t = replacetext(t, "", "\[/i\]") + t = replacetext(t, "", "\[u\]") + t = replacetext(t, "", "\[/u\]") + t = replacetext(t, "
", "\[center\]") + t = replacetext(t, "
", "\[/center\]") + t = replacetext(t, "

", "\[h1\]") + t = replacetext(t, "

", "\[/h1\]") + t = replacetext(t, "

", "\[h2\]") + t = replacetext(t, "

", "\[/h2\]") + t = replacetext(t, "

", "\[h3\]") + t = replacetext(t, "

", "\[/h3\]") + t = replacetext(t, "
  • ", "\[*\]") + t = replacetext(t, "
    ", "\[hr\]") + t = replacetext(t, "", "\[/list\]") + t = replacetext(t, "", "\[grid\]") + t = replacetext(t, "
    ", "\[/grid\]") + t = replacetext(t, "", "\[row\]") + t = replacetext(t, "", "\[cell\]") + t = replacetext(t, "", "\[logo\]") + t = replacetext(t, "", "\[redlogo\]") + t = replacetext(t, "", "\[sglogo\]") + t = replacetext(t, "", "\[field\]") + t = replacetext(t, "R E D A C T E D", "\[redacted\]") + t = strip_html_properly(t) + return t + // Random password generator /proc/GenerateKey() //Feel free to move to Helpers. diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 717d7a927b..4c60b7a9bc 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1154,7 +1154,7 @@ var/list/WALLITEMS = list( if(length(temp_col )<2) temp_col = "0[temp_col]" colour += temp_col - return colour + return "#[colour]" /proc/color_square(red, green, blue, hex) var/color = hex ? hex : "#[num2hex(red, 2)][num2hex(green, 2)][num2hex(blue, 2)]" @@ -1171,7 +1171,7 @@ var/mob/dview/dview_mob = new log_error("Had to recreate the dview mob!") dview_mob.loc = center - + dview_mob.see_invisible = invis_flags . = view(range, dview_mob) @@ -1490,7 +1490,7 @@ GLOBAL_REAL_VAR(list/stack_trace_storage) . += new /obj/screen/plane_master/lighting //Lighting system (but different!) . += new /obj/screen/plane_master/o_light_visual //Object lighting (using masks) . += new /obj/screen/plane_master/emissive //Emissive overlays - + . += new /obj/screen/plane_master/ghosts //Ghosts! . += new /obj/screen/plane_master{plane = PLANE_AI_EYE} //AI Eye! diff --git a/code/_helpers/unsorted_vr.dm b/code/_helpers/unsorted_vr.dm index daf4db48d7..0890c1f9c6 100644 --- a/code/_helpers/unsorted_vr.dm +++ b/code/_helpers/unsorted_vr.dm @@ -18,7 +18,8 @@ continue if(vent.welded) continue - if(istype(get_area(vent), /area/crew_quarters/sleep)) //No going to dorms + var/area/A = get_area(vent) + if(A.forbid_events) continue vent_list += vent if(!vent_list.len) diff --git a/code/_macros.dm b/code/_macros.dm index d122d9045f..737b317abe 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -42,4 +42,6 @@ #define WORLD_ICON_SIZE 32 //Needed for the R-UST port -#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 //Needed for the R-UST port \ No newline at end of file +#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 //Needed for the R-UST port + +#define JOINTEXT(X) jointext(X, null) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 03fd9bac74..8954bf45bc 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -19,7 +19,7 @@ /obj/screen/Destroy() master = null return ..() - + /obj/screen/proc/component_click(obj/screen/component_button/component, params) return @@ -46,9 +46,8 @@ object_overlays.Cut() /obj/screen/inventory/proc/add_overlays() - var/mob/user = hud.mymob - - if(hud && user && slot_id) + if(hud && hud.mymob && slot_id) + var/mob/user = hud.mymob var/obj/item/holding = user.get_active_hand() if(!holding || user.get_equipped_item(slot_id)) @@ -619,7 +618,7 @@ var/mob/living/carbon/C = hud.mymob if(C.handcuffed) add_overlay(handcuff_overlay) - + // PIP stuff /obj/screen/component_button var/obj/screen/parent @@ -634,7 +633,7 @@ // Character setup stuff /obj/screen/setup_preview - + var/datum/preferences/pref /obj/screen/setup_preview/Destroy() @@ -704,7 +703,7 @@ * size of the screen. This is not ideal, as filter() is faster, and has * alpha masks, but the alpha masks it has can't be animated, so the 'ping' * mode of this device isn't possible using that technique. - * + * * The markers use that technique, though, so at least there's that. */ /obj/screen/movable/mapper_holder @@ -722,7 +721,7 @@ var/obj/screen/mapper/mask_full/mask_full var/obj/screen/mapper/mask_ping/mask_ping var/obj/screen/mapper/bg/bg - + var/obj/screen/mapper/frame/frame var/obj/screen/mapper/powbutton/powbutton var/obj/screen/mapper/mapbutton/mapbutton @@ -732,7 +731,7 @@ /obj/screen/movable/mapper_holder/Initialize(mapload, newowner) owner = newowner - + mask_full = new(src) // Full white square mask mask_ping = new(src) // Animated 'pinging' mask bg = new(src) // Background color, holds map in vis_contents, uses mult against masks @@ -740,19 +739,19 @@ frame = new(src) // Decorative frame powbutton = new(src) // Clickable button mapbutton = new(src) // Clickable button - + frame.icon_state = initial(frame.icon_state)+owner.hud_frame_hint /** * The vis_contents layout is: this(frame,extras_holder,mask(bg(map))) * bg is set to BLEND_MULTIPLY against the mask to crop it. */ - + mask_full.vis_contents.Add(bg) mask_ping.vis_contents.Add(bg) frame.vis_contents.Add(powbutton,mapbutton) vis_contents.Add(frame) - + /obj/screen/movable/mapper_holder/Destroy() qdel_null(mask_full) @@ -772,12 +771,12 @@ running = TRUE if(ping) vis_contents.Add(mask_ping) - else + else vis_contents.Add(mask_full) bg.vis_contents.Cut() bg.vis_contents.Add(map) - + if(extras && !extras_holder) extras_holder = extras vis_contents += extras_holder @@ -790,7 +789,7 @@ off() else on() - + /obj/screen/movable/mapper_holder/proc/mapClick() if(owner) if(running) @@ -818,7 +817,7 @@ mouse_opacity = 0 var/obj/screen/movable/mapper_holder/parent -/obj/screen/mapper/New() +/obj/screen/mapper/New() ..() parent = loc @@ -921,10 +920,10 @@ var/static/list/ammo_screen_loc_list = list(ui_ammo_hud1, ui_ammo_hud2, ui_ammo_hud3 ,ui_ammo_hud4) /obj/screen/ammo/proc/add_hud(var/mob/living/user, var/obj/item/weapon/gun/G) - + if(!user?.client) return - + if(!G) CRASH("/obj/screen/ammo/proc/add_hud() has been called from [src] without the required param of G") diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index 3839853567..acfa32d52f 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -126,6 +126,7 @@ var/const/MED_I_FREQ = 1485 var/const/SEC_I_FREQ = 1475 var/const/TALON_FREQ = 1363 //VOREStation Add +var/const/CSN_FREQ = 1365 //VOREStation Add var/list/radiochannels = list( "Common" = PUB_FREQ, @@ -145,7 +146,8 @@ var/list/radiochannels = list( "Entertainment" = ENT_FREQ, "Medical(I)" = MED_I_FREQ, "Security(I)" = SEC_I_FREQ, - "Talon" = TALON_FREQ //VOREStation Add + "Talon" = TALON_FREQ, //VOREStation Add + "Casino" = CSN_FREQ, ) // Hey, if anyone ever needs to update tgui/packages/tgui/constants.js with new radio channels @@ -155,7 +157,7 @@ var/list/radiochannels = list( set category = "Generate TGUI Radio Constants" var/list/channel_info = list() - + for(var/i in RADIO_LOW_FREQ to RADIO_HIGH_FREQ) for(var/key in radiochannels) if(i == radiochannels[key]) @@ -192,7 +194,7 @@ var/list/ANTAG_FREQS = list(SYND_FREQ, RAID_FREQ) //Department channels, arranged lexically var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, ENT_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ) -var/list/OFFMAP_FREQS = list(TALON_FREQ) //VOREStation Add +var/list/OFFMAP_FREQS = list(TALON_FREQ, CSN_FREQ) //VOREStation Add /proc/frequency_span_class(var/frequency) // Antags! diff --git a/code/controllers/subsystems/job.dm b/code/controllers/subsystems/job.dm index f265f39955..2aa6d84cb6 100644 --- a/code/controllers/subsystems/job.dm +++ b/code/controllers/subsystems/job.dm @@ -131,12 +131,13 @@ SUBSYSTEM_DEF(job) return department_datums[primary_department] +/datum/controller/subsystem/job/proc/get_ping_role(var/role) + var/datum/job/J = get_job(role) + if(J.requestable) + return get_primary_department_of_job(J) + // Someday it might be good to port code/game/jobs/job_controller.dm to here and clean it up. - - - - /datum/controller/subsystem/job/proc/job_debug_message(message) if(debug_messages) log_debug("JOB DEBUG: [message]") \ No newline at end of file diff --git a/code/controllers/subsystems/persist_vr.dm b/code/controllers/subsystems/persist_vr.dm index ea29ae2238..0bde0599cb 100644 --- a/code/controllers/subsystems/persist_vr.dm +++ b/code/controllers/subsystems/persist_vr.dm @@ -59,6 +59,8 @@ SUBSYSTEM_DEF(persist) var/client/C = M.client var/wait_in_hours = wait / (1 HOUR) var/pto_factored = wait_in_hours * J.timeoff_factor + if(J.playtime_only) + pto_factored = 0 LAZYINITLIST(C.department_hours) LAZYINITLIST(C.play_hours) var/dept_hours = C.department_hours diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 20a9ffeaa4..ea8873e717 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -50,9 +50,9 @@ var/global/datum/controller/subsystem/ticker/ticker pregame_timeleft = config.pregame_time send2mainirc("Server lobby is loaded and open at byond://[config.serverurl ? config.serverurl : (config.server ? config.server : "[world.address]:[world.port]")]") SSwebhooks.send( - WEBHOOK_ROUNDPREP, + WEBHOOK_ROUNDPREP, list( - "map" = station_name(), + "map" = station_name(), "url" = get_world_url() ) ) @@ -397,14 +397,19 @@ var/global/datum/controller/subsystem/ticker/ticker if(player && player.ready && player.mind?.assigned_role) var/datum/job/J = SSjob.get_job(player.mind.assigned_role) + // Ask their new_player mob to spawn them + if(!player.spawn_checks_vr(player.mind.assigned_role)) + var/datum/job/job_datum = job_master.GetJob(J.title) + job_datum.current_positions-- + player.mind.assigned_role = null + continue //VOREStation Add + // Snowflakey AI treatment if(J?.mob_type & JOB_SILICON_AI) player.close_spawn_windows() player.AIize(move = TRUE) continue - // Ask their new_player mob to spawn them - if(!player.spawn_checks_vr(player.mind.assigned_role)) continue //VOREStation Add var/mob/living/carbon/human/new_char = player.create_character() // Created their playable character, delete their /mob/new_player diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 8da8bab272..fef1bcd25d 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -68,7 +68,7 @@ names += componentsubtypes names += "---Elements---" names += sortTim(subtypesof(/datum/element), /proc/cmp_typepaths_asc) - var/result = tgui_input_text(usr, "Choose a component/element to add:", "Add Component/Element", names) + var/result = tgui_input_list(usr, "Choose a component/element to add:", "Add Component/Element", names) if(!usr || !result || result == "---Components---" || result == "---Elements---") return if(QDELETED(src)) diff --git a/code/datums/uplink/badassery.dm b/code/datums/uplink/badassery.dm index 8addcc3f64..8208894af4 100644 --- a/code/datums/uplink/badassery.dm +++ b/code/datums/uplink/badassery.dm @@ -91,4 +91,4 @@ var/obj/structure/largecrate/C = /obj/structure/largecrate icon = image(initial(C.icon), initial(C.icon_state)) - return "[bicon(icon)]" \ No newline at end of file + return "\icon[icon][bicon(icon)]" \ No newline at end of file diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm index 2abb5a1d1a..e5defa6023 100644 --- a/code/datums/uplink/uplink_items.dm +++ b/code/datums/uplink/uplink_items.dm @@ -130,7 +130,7 @@ var/datum/uplink/uplink = new() /datum/uplink_item/item/log_icon() var/obj/I = path - return "[bicon(I)]" + return "\icon[I][bicon(I)]" /******************************** * * @@ -144,7 +144,7 @@ var/datum/uplink/uplink = new() if(!default_abstract_uplink_icon) default_abstract_uplink_icon = image('icons/obj/pda.dmi', "pda-syn") - return "[bicon(default_abstract_uplink_icon)]" + return "\icon[default_abstract_uplink_icon][bicon(default_abstract_uplink_icon)]" /* * Crated goods. diff --git a/code/datums/wires/camera.dm b/code/datums/wires/camera.dm index 571e2a22e6..c572ad8d27 100644 --- a/code/datums/wires/camera.dm +++ b/code/datums/wires/camera.dm @@ -57,7 +57,7 @@ C.light_disabled = !C.light_disabled if(WIRE_CAM_ALARM) - C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*") + C.visible_message("\icon[C][bicon(C)] *beep*", "\icon[C][bicon(C)] *beep*") ..() /datum/wires/camera/proc/CanDeconstruct() diff --git a/code/datums/wires/jukebox.dm b/code/datums/wires/jukebox.dm index 125bbd78ef..cec0f4d370 100644 --- a/code/datums/wires/jukebox.dm +++ b/code/datums/wires/jukebox.dm @@ -31,16 +31,16 @@ var/obj/machinery/media/jukebox/A = holder switch(wire) if(WIRE_MAIN_POWER1) - holder.visible_message("[bicon(holder)] The power light flickers.") + holder.visible_message("\icon[holder][bicon(holder)] The power light flickers.") A.shock(usr, 90) if(WIRE_JUKEBOX_HACK) - holder.visible_message("[bicon(holder)] The parental guidance light flickers.") + holder.visible_message("\icon[holder][bicon(holder)] The parental guidance light flickers.") if(WIRE_REVERSE) - holder.visible_message("[bicon(holder)] The data light blinks ominously.") + holder.visible_message("\icon[holder][bicon(holder)] The data light blinks ominously.") if(WIRE_SPEEDUP) - holder.visible_message("[bicon(holder)] The speakers squeaks.") + holder.visible_message("\icon[holder][bicon(holder)] The speakers squeaks.") if(WIRE_SPEEDDOWN) - holder.visible_message("[bicon(holder)] The speakers rumble.") + holder.visible_message("\icon[holder][bicon(holder)] The speakers rumble.") if(WIRE_START) A.StartPlaying() if(WIRE_STOP) diff --git a/code/datums/wires/mines.dm b/code/datums/wires/mines.dm index 5e757ad16c..55ea718c3f 100644 --- a/code/datums/wires/mines.dm +++ b/code/datums/wires/mines.dm @@ -21,15 +21,15 @@ switch(wire) if(WIRE_EXPLODE) - C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*") + C.visible_message("\icon[C][bicon(C)] *BEEE-*", "\icon[C][bicon(C)] *BEEE-*") C.explode() if(WIRE_EXPLODE_DELAY) - C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*") + C.visible_message("\icon[C][bicon(C)] *BEEE-*", "\icon[C][bicon(C)] *BEEE-*") C.explode() if(WIRE_DISARM) - C.visible_message("[bicon(C)] *click!*", "[bicon(C)] *click!*") + C.visible_message("\icon[C][bicon(C)] *click!*", "\icon[C][bicon(C)] *click!*") var/obj/effect/mine/MI = new C.mineitemtype(get_turf(C)) if(C.trap) @@ -41,15 +41,15 @@ qdel(C) if(WIRE_BADDISARM) - C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*") + C.visible_message("\icon[C][bicon(C)] *BEEPBEEPBEEP*", "\icon[C][bicon(C)] *BEEPBEEPBEEP*") spawn(20) C.explode() if(WIRE_TRAP) - C.visible_message("[bicon(C)] *click!*", "[bicon(C)] *click!*") + C.visible_message("\icon[C][bicon(C)] *click!*", "\icon[C][bicon(C)] *click!*") if(mend) - C.visible_message("[bicon(C)] - The mine recalibrates[C.camo_net ? ", revealing \the [C.trap] inside." : "."]") + C.visible_message("\icon[C][bicon(C)] - The mine recalibrates[C.camo_net ? ", revealing \the [C.trap] inside." : "."]") C.alpha = 255 @@ -61,21 +61,21 @@ return switch(wire) if(WIRE_EXPLODE) - C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*") + C.visible_message("\icon[C][bicon(C)] *beep*", "\icon[C][bicon(C)] *beep*") if(WIRE_EXPLODE_DELAY) - C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*") + C.visible_message("\icon[C][bicon(C)] *BEEPBEEPBEEP*", "\icon[C][bicon(C)] *BEEPBEEPBEEP*") spawn(20) C.explode() if(WIRE_DISARM) - C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*") + C.visible_message("\icon[C][bicon(C)] *ping*", "\icon[C][bicon(C)] *ping*") if(WIRE_BADDISARM) - C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*") + C.visible_message("\icon[C][bicon(C)] *ping*", "\icon[C][bicon(C)] *ping*") if(WIRE_TRAP) - C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*") + C.visible_message("\icon[C][bicon(C)] *ping*", "\icon[C][bicon(C)] *ping*") ..() diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm index e3fd198b3b..1787039622 100644 --- a/code/datums/wires/particle_accelerator.dm +++ b/code/datums/wires/particle_accelerator.dm @@ -26,7 +26,7 @@ C.interface_control = !C.interface_control if(WIRE_PARTICLE_POWER_LIMIT) - C.visible_message("[bicon(C)][C] makes a large whirring noise.") + C.visible_message("\icon[C][bicon(C)][C] makes a large whirring noise.") /datum/wires/particle_acc/control_box/on_cut(wire, mend) var/obj/machinery/particle_accelerator/control_box/C = holder diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index eac4e10ea0..033183a639 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -40,7 +40,7 @@ if(!msg_sanitized) message = sanitize(message, extra = 0) - message_title = sanitizeSafe(message_title) + message_title = sanitizeSafe(message_title) var/list/zlevels if(zlevel) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index d86e526e39..d08c7a7246 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -806,11 +806,13 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Shuttle Dock Hallway - Dock One" icon_state = "entry_D1" base_turf = /turf/space + forbid_events = TRUE /area/hallway/secondary/entry/D2 name = "\improper Shuttle Dock Hallway - Dock Two" icon_state = "entry_D2" base_turf = /turf/space + forbid_events = TRUE /area/hallway/secondary/entry/D2/arrivals name = "\improper Shuttle Dock Hallway - Dock Two" @@ -822,6 +824,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Shuttle Dock Hallway - Dock Three" icon_state = "entry_D3" base_turf = /turf/space + forbid_events = TRUE /area/hallway/secondary/entry/D4 name = "\improper Shuttle Dock Hallway - Dock Four" @@ -963,6 +966,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon_state = "Sleep" ambience = AMBIENCE_GENERIC forbid_events = TRUE + forbid_singulo = TRUE /area/crew_quarters/toilet name = "\improper Dormitory Toilets" diff --git a/code/game/area/Space Station 13 areas_ch.dm b/code/game/area/Space Station 13 areas_ch.dm index 473b7fb02d..4d69fe8e4e 100644 --- a/code/game/area/Space Station 13 areas_ch.dm +++ b/code/game/area/Space Station 13 areas_ch.dm @@ -29,6 +29,7 @@ /area/surface/outpost/main/dorms name = "\improper Main Outpost Dorms" soundproofed = TRUE + forbid_events = TRUE /area/surface/outpost/main/dorms/dorm_1 name = "\improper Main Outpost Dorm One" @@ -72,6 +73,7 @@ /area/crew_quarters/sleep soundproofed = TRUE + forbid_events = TRUE /area/crew_quarters/sleep/vistor_room_1 limit_mob_size = FALSE @@ -110,4 +112,5 @@ limit_mob_size = FALSE /area/medical/cryo/autoresleeve - name = "\improper Medical Autoresleeving" \ No newline at end of file + name = "\improper Medical Autoresleeving" + forbid_events = TRUE diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index ad9ef7a6dd..31d1d07f2b 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -51,6 +51,7 @@ var/sound_env = STANDARD_STATION var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf var/forbid_events = FALSE // If true, random events will not start inside this area. + var/forbid_singulo = FALSE // If true singulo will not move in. var/no_spoilers = FALSE // If true, makes it much more difficult to see what is inside an area with things like mesons. var/soundproofed = FALSE // If true, blocks sounds from other areas and prevents hearers on other areas from hearing the sounds within. @@ -379,7 +380,7 @@ var/list/mob/living/forced_ambiance_list = new /area/Entered(mob/M) if(!istype(M) || !M.ckey) return - + if(!isliving(M)) M.lastarea = src return @@ -450,6 +451,8 @@ var/list/mob/living/forced_ambiance_list = new return if(H.incorporeal_move) // VOREstation edit - Phaseshifted beings should not be affected by gravity return + if(H.species.can_zero_g_move || H.species.can_space_freemove) + return if(H.m_intent == "run") H.AdjustStunned(6) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 5ef2fd6818..d1640d64cd 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -225,7 +225,7 @@ else f_name += "oil-stained [name][infix]." - var/list/output = list("[bicon(src)] That's [f_name] [suffix]", desc) + var/list/output = list("\icon[src.examine_icon()][bicon(src)] That's [f_name] [suffix]", desc) if(user.client?.prefs.examine_text_mode == EXAMINE_MODE_INCLUDE_USAGE) output += description_info diff --git a/code/game/gamemodes/cult/construct_spells.dm b/code/game/gamemodes/cult/construct_spells.dm index 62cdd5bf48..5bd8929555 100644 --- a/code/game/gamemodes/cult/construct_spells.dm +++ b/code/game/gamemodes/cult/construct_spells.dm @@ -512,7 +512,7 @@ var/obj/item/projectile/new_projectile = make_projectile(spell_projectile, user) new_projectile.old_style_target(hit_atom) new_projectile.fire() - log_and_message_admins("has casted [src] at \the [hit_atom].") + log_attack("has casted [src] at \the [hit_atom].")//CHOMPEdit from log_and_message_admins if(fire_sound) playsound(src, fire_sound, 75, 1) return 1 diff --git a/code/game/jobs/job/assistant_vr.dm b/code/game/jobs/job/assistant_vr.dm index bfcf3037b4..1aa1f7cb55 100644 --- a/code/game/jobs/job/assistant_vr.dm +++ b/code/game/jobs/job/assistant_vr.dm @@ -27,6 +27,7 @@ job_description = "An Intern does whatever is requested of them, often doing so in process of learning \ another job. Though they are part of the crew, they have no real authority." timeoff_factor = 0 // Interns, noh + requestable = FALSE /datum/alt_title/intern_eng title = "Apprentice Engineer" @@ -96,6 +97,7 @@ supervisors = "nobody! You don't work here" job_description = "A Visitor is just there to visit the place. They have no real authority or responsibility." timeoff_factor = 0 + requestable = FALSE alt_titles = list("Guest" = /datum/alt_title/guest, "Traveler" = /datum/alt_title/traveler) /datum/job/assistant/New() diff --git a/code/game/jobs/job/engineering_vr.dm b/code/game/jobs/job/engineering_vr.dm index 0c698587b6..e0ca7bac7e 100644 --- a/code/game/jobs/job/engineering_vr.dm +++ b/code/game/jobs/job/engineering_vr.dm @@ -23,17 +23,28 @@ /datum/alt_title/maintenance_manager title = "Maintenance Manager" +/datum/job/chief_engineer/get_request_reasons() + return list("Engine setup", "Construction project", "Repairs necessary") + /datum/job/engineer pto_type = PTO_ENGINEERING alt_titles = list("Maintenance Technician" = /datum/alt_title/maint_tech, "Engine Technician" = /datum/alt_title/engine_tech, - "Electrician" = /datum/alt_title/electrician, "Construction Engineer" = /datum/alt_title/construction_engi) + "Electrician" = /datum/alt_title/electrician, "Construction Engineer" = /datum/alt_title/construction_engi, "Engineering Contractor" = /datum/alt_title/engineering_contractor) /datum/alt_title/construction_engi title = "Construction Engineer" title_blurb = "A Construction Engineer fulfills similar duties to other engineers, but usually occupies spare time with construction of extra facilities in dedicated areas or \ as additions to station layout." +/datum/alt_title/engineering_contractor + title = "Engineering Contractor" + title_blurb = "An Engineering Contractor fulfills similar duties to other engineers, but isn't directly employed by NT proper." + +/datum/job/engineer/get_request_reasons() + return list("Engine setup", "Construction project", "Repairs necessary") + + /datum/job/atmos @@ -50,3 +61,6 @@ /datum/alt_title/disposals_tech title = "Disposals Technician" title_blurb = "A Disposals Technician is an Atmospheric Technician still and can fulfill all the same duties, although specializes more in disposals delivery system's operations and configurations." + +/datum/job/atmos/get_request_reasons() + return list("Construction project", "Repairs necessary") \ No newline at end of file diff --git a/code/game/jobs/job/job_vr.dm b/code/game/jobs/job/job_vr.dm index a416a3af48..ac8b6be0b4 100644 --- a/code/game/jobs/job/job_vr.dm +++ b/code/game/jobs/job/job_vr.dm @@ -17,6 +17,11 @@ //Time required in the department as other jobs before playing this one (in hours) var/dept_time_required = 0 + //Do we forbid ourselves from earning PTO? + var/playtime_only = FALSE + + var/requestable = TRUE + // Check client-specific availability rules. /datum/job/proc/player_has_enough_pto(client/C) return timeoff_factor >= 0 || (C && LAZYACCESS(C.department_hours, pto_type) > 0) @@ -39,7 +44,7 @@ if(C && config.use_playtime_restriction_for_jobs && dept_time_required) var/remaining_time_needed = dept_time_required for(var/key in C.play_hours) - if(isnum(C.play_hours[key])) + if(isnum(C.play_hours[key]) && !(key == PTO_TALON)) remaining_time_needed = max(0, remaining_time_needed - C.play_hours[key]) return remaining_time_needed return 0 @@ -55,4 +60,7 @@ if(isnum(C.play_hours[PTO_EXPLORATION])) remaining_time_needed = max(0, remaining_time_needed - C.play_hours[PTO_EXPLORATION]) return remaining_time_needed - return 0 \ No newline at end of file + return 0 + +/datum/job/proc/get_request_reasons() + return list() \ No newline at end of file diff --git a/code/game/jobs/job/medical_vr.dm b/code/game/jobs/job/medical_vr.dm index 120d538e4a..5fc2081ebd 100644 --- a/code/game/jobs/job/medical_vr.dm +++ b/code/game/jobs/job/medical_vr.dm @@ -21,14 +21,16 @@ /datum/alt_title/healthcare_manager title = "Healthcare Manager" +/datum/job/cmo/get_request_reasons() + return list("Surgery pending", "Viral outbreak") + /datum/job/doctor spawn_positions = 5 pto_type = PTO_MEDICAL alt_titles = list("Physician" = /datum/alt_title/physician, "Medical Practitioner" = /datum/alt_title/medical_practitioner, "Surgeon" = /datum/alt_title/surgeon, "Emergency Physician" = /datum/alt_title/emergency_physician, "Nurse" = /datum/alt_title/nurse, "Orderly" = /datum/alt_title/orderly, - "Virologist" = /datum/alt_title/virologist) - + "Virologist" = /datum/alt_title/virologist, "Medical Contractor" = /datum/alt_title/medical_contractor) /datum/alt_title/physician title = "Physician" @@ -42,6 +44,13 @@ and dirty labor around the department." title_outfit = /decl/hierarchy/outfit/job/medical/doctor/nurse +/datum/alt_title/medical_contractor + title = "Medical Contractor" + title_blurb = "A Medical Contractor can be anything from a full-blown doctor to the likes of a nurse or orderly, but isn't directly employed by NT proper." + +/datum/job/doctor/get_request_reasons() + return list("Surgery pending", "Viral outbreak") + /datum/job/chemist pto_type = PTO_MEDICAL @@ -71,10 +80,15 @@ /datum/job/paramedic pto_type = PTO_MEDICAL - alt_titles = list("Emergency Medical Technician" = /datum/alt_title/emt, "Medical Responder" = /datum/alt_title/medical_responder) + alt_titles = list("Emergency Medical Technician" = /datum/alt_title/emt, "Medical Responder" = /datum/alt_title/medical_responder) //CHOMPedit: Removed SAR because that's an actual job here /datum/alt_title/medical_responder title = "Medical Responder" title_blurb = "A Medical Responder is primarily concerned with the recovery of patients who are unable to make it to the Medical Department on their \ own. They are capable of keeping a patient stabilized until they reach the hands of someone with more training." title_outfit = /decl/hierarchy/outfit/job/medical/paramedic/emt + +/* //CHOMPedit: Commented out because this is an actual job here +/datum/alt_title/sar + title = "Search and Rescue" +*/ diff --git a/code/game/jobs/job/security_vr.dm b/code/game/jobs/job/security_vr.dm index b6b704660f..22de747d7b 100644 --- a/code/game/jobs/job/security_vr.dm +++ b/code/game/jobs/job/security_vr.dm @@ -16,6 +16,9 @@ /datum/alt_title/security_manager title = "Security Manager" +/datum/job/hos/get_request_reasons() + return list("Wildlife management", "Forensic investigation") + /datum/job/warden pto_type = PTO_SECURITY @@ -28,6 +31,9 @@ /datum/alt_title/armory_superintendent title = "Armory Superintendent" +/datum/job/warden/get_request_reasons() + return list("Wildlife management") + /datum/job/detective pto_type = PTO_SECURITY @@ -39,13 +45,16 @@ /datum/alt_title/security_inspector title = "Security Inspector" +/datum/job/detective/get_request_reasons() + return list("Forensic investigation") + /datum/job/officer total_positions = 5 spawn_positions = 5 pto_type = PTO_SECURITY alt_titles = list("Patrol Officer" = /datum/alt_title/patrol_officer, "Security Guard" = /datum/alt_title/security_guard, - "Security Deputy" = /datum/alt_title/security_guard, "Junior Officer" = /datum/alt_title/junior_officer) + "Security Deputy" = /datum/alt_title/security_guard, "Junior Officer" = /datum/alt_title/junior_officer, "Security Contractor" = /datum/alt_title/security_contractor) /datum/alt_title/patrol_officer title = "Patrol Officer" @@ -55,3 +64,9 @@ /datum/alt_title/security_deputy title = "Security Deputy" + +/datum/alt_title/security_contractor + title = "Security Contractor" + +/datum/job/officer/get_request_reasons() + return list("Wildlife management") diff --git a/code/game/jobs/job/special_vr.dm b/code/game/jobs/job/special_vr.dm index 54e8c157da..3a10a23df5 100644 --- a/code/game/jobs/job/special_vr.dm +++ b/code/game/jobs/job/special_vr.dm @@ -113,6 +113,7 @@ job_description = "A Clown is there to entertain the crew and keep high morale using various harmless pranks and ridiculous jokes!" whitelist_only = 1 latejoin_only = 0 + requestable = FALSE outfit_type = /decl/hierarchy/outfit/job/clown pto_type = PTO_CIVILIAN alt_titles = list("Jester" = /datum/alt_title/jester, "Fool" = /datum/alt_title/fool) @@ -144,6 +145,7 @@ alt_titles = list("Poseur" = /datum/alt_title/poseur) whitelist_only = 1 latejoin_only = 0 + requestable = FALSE outfit_type = /decl/hierarchy/outfit/job/mime pto_type = PTO_CIVILIAN diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 046db35f33..5a414430ea 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -355,7 +355,7 @@ var/global/datum/controller/occupations/job_master return 1 -/datum/controller/occupations/proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0) +/datum/controller/occupations/proc/EquipRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0, var/announce = TRUE) if(!H) return null var/datum/job/job = GetJob(rank) @@ -494,7 +494,7 @@ var/global/datum/controller/occupations/job_master return H // TWEET PEEP - if(rank == "Site Manager") + if(rank == "Site Manager" && announce) var/sound/announce_sound = (ticker.current_state <= GAME_STATE_SETTING_UP) ? null : sound('sound/misc/boatswain.ogg', volume=20) captain_announcement.Announce("All hands, [alt_title ? alt_title : "Site Manager"] [H.real_name] on deck!", new_sound = announce_sound, zlevel = H.z) diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index ca40f0dc53..8d3933faca 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -835,7 +835,18 @@ TLV["temperature"] = list(T0C - 40, T0C - 20, T0C + 40, T0C + 66) // K, Lower Temperature for Freezer Air Alarms (This is because TLV is hardcoded to be generated on first_run, and therefore the only way to modify this without changing TLV generation) -// VOREStation Edit End +// VOREStation Edit End, CHOMPEdit START +/obj/machinery/alarm/sifwilderness + breach_detection = 0 + report_danger_level = 0 + +/obj/machinery/alarm/sifwilderness/first_run() + . = ..() + + TLV["oxygen"] = list(16, 17, 135, 140) + TLV["pressure"] = list(0,ONE_ATMOSPHERE*0.10,ONE_ATMOSPHERE*1.50,ONE_ATMOSPHERE*1.60) + TLV["temperature"] = list(T0C - 40, T0C - 31, T0C + 40, T0C + 120) +// CHOMPEdit END #undef LOAD_TLV_VALUES #undef TEST_TLV_VALUES #undef DECLARE_TLV_VALUES \ No newline at end of file diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 7def7f8b8e..188fd356dc 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1125,7 +1125,7 @@ // This is not a status display message, since it's something the character // themselves is meant to see BEFORE putting the money in - to_chat(usr, "[bicon(cashmoney)] That is not enough money.") + to_chat(usr, "\icon[cashmoney][bicon(cashmoney)] That is not enough money.") return 0 if(istype(cashmoney, /obj/item/weapon/spacecash)) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 137d3a7adb..6ceab53895 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -111,7 +111,7 @@ Class Procs: var/clickvol = 40 // volume var/interact_offline = 0 // Can the machine be interacted with while de-powered. var/obj/item/weapon/circuitboard/circuit = null - + // 0.0 - 1.0 multipler for prob() based on bullet structure damage // So if this is 1.0 then a 100 damage bullet will always break this structure // If this is 0.5 then a 50 damage bullet will break this structure 25% of the time @@ -284,7 +284,7 @@ Class Procs: /obj/machinery/proc/state(var/msg) for(var/mob/O in hearers(src, null)) - O.show_message("[bicon(src)] [msg]", 2) + O.show_message("\icon[src][bicon(src)] [msg]", 2) /obj/machinery/proc/ping(text=null) if(!text) @@ -439,7 +439,7 @@ Class Procs: for(var/obj/I in contents) if(istype(I,/obj/item/weapon/card/id)) I.forceMove(src.loc) - + if(!circuit) return 0 var/obj/structure/frame/A = new /obj/structure/frame(src.loc) @@ -499,7 +499,7 @@ Class Procs: var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) - + var/atom/droploc = drop_location() if(!droploc || !contents.len) // not even a circuit? playsound(src, 'sound/machines/machine_die_short.ogg') @@ -513,17 +513,17 @@ Class Procs: if(severity != 1) for(var/obj/item/weapon/card/id/I in contents) surviving_parts |= I - + // May populate some items to throw around if(!LAZYLEN(component_parts) && circuit) circuit.apply_default_parts(src) - + var/survivability switch(severity) // No survivors if(1) survivability = 0 - + // 1 part survives if(2) survivability = 0 @@ -534,15 +534,15 @@ Class Procs: // 50% of parts destroyed on average if(3) survivability = 50 - + // No parts destroyed, but you lose the frame else survivability = 100 - + for(var/atom/movable/P in contents) if(prob(survivability)) surviving_parts |= P - + if(circuit && severity >= 2) var/datum/frame/frame_types/FT = circuit.board_type if(istype(FT)) diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index 705914f794..c63ea1f1d8 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -138,7 +138,7 @@ var/icon/I = imap[1+(ix + icx*iy)*2] var/icon/I2 = imap[2+(ix + icx*iy)*2] - //to_world("icon: [bicon(I)]") + //to_world("icon: \icon[I][bicon(I)]") I.DrawBox(colour, rx, ry, rx+1, ry+1) @@ -153,7 +153,7 @@ H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]" - //to_world("[bicon(I)] at [H.screen_loc]") + //to_world("\icon[I][bicon(I)] at [H.screen_loc]") H.name = (i==0)?"maprefresh":"map" @@ -266,7 +266,7 @@ //to_world("trying [ix],[iy] : [ix+icx*iy]") var/icon/I = imap[1+(ix + icx*iy)] - //to_world("icon: [bicon(I)]") + //to_world("icon: \icon[I][bicon(I)]") I.DrawBox(colour, rx, ry, rx, ry) @@ -279,7 +279,7 @@ H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]" - //to_world("[bicon(I)] at [H.screen_loc]") + //to_world("\icon[I][bicon(I)] at [H.screen_loc]") H.name = (i==0)?"maprefresh":"map" diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index eaad936be4..81e04792c1 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -419,7 +419,7 @@ return ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "PortableTurret", name, 500, 400) + ui = new(user, src, "PortableTurret", name, ui_x = 500, ui_y = 400) ui.open() /obj/machinery/porta_turret/tgui_data(mob/user) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index f52c14da46..115e5e710a 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -10,7 +10,7 @@ active_power_usage = 40000 //40 kW var/efficiency = 40000 //will provide the modified power rate when upgraded var/obj/item/charging = null - var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/suit_cooling_unit/emergency, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/device/defib_kit, /obj/item/ammo_casing/microbattery, /obj/item/ammo_magazine/cell_mag, /obj/item/weapon/gun/projectile/cell_loaded) //VOREStation Add - NSFW Batteries + var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/suit_cooling_unit/emergency, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/device/defib_kit, /obj/item/ammo_casing/microbattery, /obj/item/device/paicard, /obj/item/ammo_magazine/cell_mag, /obj/item/weapon/gun/projectile/cell_loaded) // CHOMPedit: medigun stuff var/icon_state_charged = "recharger2" var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered @@ -68,7 +68,7 @@ if(EW.use_external_power) to_chat(user, "\The [EW] has no recharge port.") return - else if(istype(G, /obj/item/ammo_magazine/cell_mag)) + else if(istype(G, /obj/item/ammo_magazine/cell_mag)) // CHOMPedit start var/obj/item/ammo_magazine/cell_mag/maggy = G if(maggy.stored_ammo.len < 1) to_chat(user, "\The [G] does not have any cells installed.") @@ -81,7 +81,18 @@ to_chat(user, "\The [G] does not have any cell in its magazine installed.") return else - to_chat(user, "\The [G] does not have a magazine installed..") + to_chat(user, "\The [G] does not have a magazine installed..") // CHOMPedit end + if(istype(G, /obj/item/device/paicard)) + var/obj/item/device/paicard/ourcard = G + if(ourcard.panel_open) + to_chat(user, "\The [ourcard] won't fit in the recharger with its panel open.") + return + if(ourcard.pai) + if(ourcard.pai.stat == CONSCIOUS) + to_chat(user, "\The [ourcard] boops... it doesn't need to be recharged!") + return + else + to_chat(user, "\The [ourcard] doesn't have a personality!") return user.drop_item() @@ -134,6 +145,25 @@ if(!charging) update_use_power(USE_POWER_IDLE) icon_state = icon_state_idle + //VOREStation Edit Start - pAI revival! + else if(istype(charging, /obj/item/device/paicard)) + var/obj/item/device/paicard/pcard = charging + if(pcard.is_damage_critical()) + pcard.forceMove(get_turf(src)) + charging = null + pcard.damage_random_component() + update_icon() + else if(pcard.pai.bruteloss) + pcard.pai.adjustBruteLoss(-5) + else if(pcard.pai.fireloss) + pcard.pai.adjustFireLoss(-5) + else + charging = null + update_icon() + src.visible_message("\The [src] ejects the [pcard]!") + pcard.forceMove(get_turf(src)) + pcard.pai.full_restore() + //VOREStation Edit End else var/obj/item/weapon/cell/C = charging.get_cell() if(istype(C)) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index a1d44b9838..d2adbad8da 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -198,7 +198,7 @@ desc += "
    It is capable of repairing burn damage." /obj/machinery/recharge_station/proc/build_overlays() - cut_overlay() + cut_overlays() switch(round(chargepercentage())) if(1 to 20) add_overlay("statn_c0") @@ -323,4 +323,4 @@ icon_state = "borg_pod_opened" if(icon_update_tick == 0) - build_overlays() \ No newline at end of file + build_overlays() diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 7350ca0c1e..6b6fc6df6a 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -98,7 +98,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console/update_icon() cut_overlays() - + if(stat & NOPOWER) set_light(0) set_light_on(FALSE) @@ -145,9 +145,9 @@ var/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console/tgui_act(action, list/params) if(..()) return TRUE - + add_fingerprint(usr) - + switch(action) if("write") if(reject_bad_text(params["write"])) @@ -198,7 +198,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() screen = RCS_SENTPASS message_log += list(list("Message sent to [recipient]", "[message]")) else - audible_message(text("[bicon(src)] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) + audible_message(text("\icon[src][bicon(src)] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) . = TRUE //Handle printing diff --git a/code/game/machinery/suit_cycler_datums.dm b/code/game/machinery/suit_cycler_datums.dm index 4d84d116af..6cc706aea1 100644 --- a/code/game/machinery/suit_cycler_datums.dm +++ b/code/game/machinery/suit_cycler_datums.dm @@ -346,3 +346,5 @@ GLOBAL_LIST_EMPTY(suit_cycler_emagged) name = SPECIES_SERGAL /datum/suit_cycler_choice/species/vulpkanin name = SPECIES_VULPKANIN +/datum/suit_cycler_choice/species/altevian + name = SPECIES_ALTEVIAN diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 175434088d..9ee8ad6f6e 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -520,7 +520,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /datum/suit_cycler_choice/department/sec/riot, /datum/suit_cycler_choice/department/sec/eva ) - + /// Species that the cycler can refit suits for. Null assumes all except specially excluded ones. var/list/limit_species @@ -544,13 +544,13 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) species = load_species() emagged_departments = load_emagged() limit_departments = null // just for mem - + target_department = departments["No Change"] target_species = species["No Change"] if(!target_department || !target_species) stat |= BROKEN - + wires = new(src) /obj/machinery/suit_cycler/Destroy() @@ -704,7 +704,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /obj/machinery/suit_cycler/vintage/rugged name = "Vintage Ruggedized suit cycler" model_text = "Vintage Ruggedized" - + limit_departments = list( /datum/suit_cycler_choice/department/vintage/eng, /datum/suit_cycler_choice/department/vintage/marine, @@ -925,17 +925,17 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /obj/machinery/suit_cycler/tgui_static_data(mob/user) var/list/data = list() - + // tgui gets angy if you pass values too var/list/department_keys = list() for(var/key in departments) department_keys += key - + // emagged at the bottom if(emagged) for(var/key in emagged_departments) department_keys += key - + var/list/species_keys = list() for(var/key in species) species_keys += key @@ -943,7 +943,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) data["departments"] = department_keys data["species"] = species_keys - return data + return data /obj/machinery/suit_cycler/tgui_act(action, params) if(..()) @@ -1063,7 +1063,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /obj/machinery/suit_cycler/proc/finished_job() var/turf/T = get_turf(src) - T.visible_message("[bicon(src)]The [src] beeps several times.") + T.visible_message("\icon[src][bicon(src)]The [src] beeps several times.") icon_state = initial(icon_state) active = 0 playsound(src, 'sound/machines/boobeebeep.ogg', 50) @@ -1114,7 +1114,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /obj/machinery/suit_cycler/proc/apply_paintjob() if(!target_species || !target_department) return - + // Helmet to new paint if(target_department.can_refit_helmet(helmet)) target_department.do_refit_helmet(helmet) @@ -1129,5 +1129,5 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) if(target_species.can_refit_to(helmet, suit, suit?.helmet)) target_species.do_refit_to(helmet, suit, suit?.helmet) else - visible_message("[bicon(src)]Unable to apply specified cosmetics with specified species. Please try again with a different species or cosmetic option selected.") + visible_message("\icon[src][bicon(src)]Unable to apply specified cosmetics with specified species. Please try again with a different species or cosmetic option selected.") return diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 5a4932fd0a..686a03cb25 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -454,7 +454,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/part_b_extra = "" if(data == DATA_ANTAG) // intercepted radio message part_b_extra = " (Intercepted)" - var/part_a = "[bicon(radio)]\[[freq_text]\][part_b_extra] " // goes in the actual output + var/part_a = "\icon[radio][bicon(radio)]\[[freq_text]\][part_b_extra] " // goes in the actual output // --- Some more pre-message formatting --- var/part_b = " " // Tweaked for security headsets -- TLE @@ -646,7 +646,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // Create a radio headset for the sole purpose of using its icon var/obj/item/device/radio/headset/radio = new - var/part_b = " [bicon(radio)]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE + var/part_b = "\icon[radio][bicon(radio)]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE var/part_blackbox_b = " \[[freq_text]\] " // Tweaked for security headsets -- TLE var/part_c = "" diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index cb9226ad99..6e684974aa 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -125,7 +125,7 @@ /obj/machinery/turretid/tgui_interact(mob/user, datum/tgui/ui = null) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "PortableTurret", name) // 500, 400 + ui = new(user, src, "PortableTurret", name, ui_x = 500, ui_y = 400) // 500, 400 ui.open() /obj/machinery/turretid/tgui_data(mob/user) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 892867c316..033cc181a1 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -280,7 +280,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/occupant_message(message) if(chassis) - chassis.occupant_message("[bicon(src)] [message]") + chassis.occupant_message("\icon[src][bicon(src)] [message]") return /obj/item/mecha_parts/mecha_equipment/proc/log_message(message) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index b038d90c42..7d384f6bf8 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -95,3 +95,9 @@ P.accuracy += M.accuracy if(!isnull(M.accuracy_dispersion)) P.dispersion = max(P.dispersion + M.accuracy_dispersion, 0) + + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.species) + P.accuracy += H.species.gun_accuracy_mod + P.dispersion = max(P.dispersion + H.species.gun_accuracy_dispersion_mod, 0) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index d728d2c1e1..ab210dc8dc 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -654,20 +654,20 @@ switch(emagged) if(0) emagged = 0.5 - visible_message("[bicon(src)] [src] beeps: \"DB error \[Code 0x00F1\]\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"DB error \[Code 0x00F1\]\"") sleep(10) - visible_message("[bicon(src)] [src] beeps: \"Attempting auto-repair\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"Attempting auto-repair\"") sleep(15) - visible_message("[bicon(src)] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"") sleep(30) - visible_message("[bicon(src)] [src] beeps: \"User DB truncated. Please contact your [using_map.company_name] system operator for future assistance.\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"User DB truncated. Please contact your [using_map.company_name] system operator for future assistance.\"") req_access = null emagged = 1 return 1 if(0.5) - visible_message("[bicon(src)] [src] beeps: \"DB not responding \[Code 0x0003\]...\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"DB not responding \[Code 0x0003\]...\"") if(1) - visible_message("[bicon(src)] [src] beeps: \"No records in User DB\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"No records in User DB\"") /obj/machinery/mecha_part_fabricator/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything var/recursive = amount == -1 ? TRUE : FALSE diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm index 470ede8a0f..d87ae30027 100644 --- a/code/game/mecha/mech_prosthetics.dm +++ b/code/game/mecha/mech_prosthetics.dm @@ -61,6 +61,7 @@ "Cyborg Parts", "Cyborg Internals", "Cybernetics", + "pAI Parts", //VOREStation Add "Implants", "Control Interfaces", "Other", diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 62736a48fb..8d3ab1c8b4 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -549,7 +549,7 @@ if(equipment?.len) . += "It's equipped with:" for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) - . += "[bicon(ME)] [ME]" + . += "\icon[ME][bicon(ME)] [ME]" /obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits. return @@ -572,7 +572,6 @@ /obj/mecha/proc/show_radial_occupant(var/mob/user) var/list/choices = list( - "Eject" = radial_image_eject, "Toggle Airtank" = radial_image_airtoggle, "Toggle Light" = radial_image_lighttoggle, "View Stats" = radial_image_statpanel @@ -584,9 +583,6 @@ if(!choice) return switch(choice) - if("Eject") - go_out() - add_fingerprint(usr) if("Toggle Airtank") use_internal_tank = !use_internal_tank occupant_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].") @@ -2449,7 +2445,7 @@ /obj/mecha/proc/occupant_message(message as text) if(message) if(src.occupant && src.occupant.client) - to_chat(src.occupant, "[bicon(src)] [message]") + to_chat(src.occupant, "\icon[src][bicon(src)] [message]") return /obj/mecha/proc/log_message(message as text,red=null) diff --git a/code/game/mecha/micro/micro.dm b/code/game/mecha/micro/micro.dm index abc39eb5a2..bea6f6f1dd 100644 --- a/code/game/mecha/micro/micro.dm +++ b/code/game/mecha/micro/micro.dm @@ -122,7 +122,7 @@ /obj/mecha/micro/move_inside() var/mob/living/carbon/C = usr - if (C.size_multiplier >= 0.5) + if (C.get_effective_size(TRUE) >= 0.5) to_chat(C, "You can't fit in this suit!") return else @@ -130,7 +130,7 @@ /obj/mecha/micro/move_inside_passenger() var/mob/living/carbon/C = usr - if (C.size_multiplier >= 0.5) + if (C.get_effective_size(TRUE) >= 0.5) to_chat(C, "You can't fit in this suit!") return else diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index b32777c65a..6f96ec1689 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -52,7 +52,7 @@ var/global/list/image/splatter_cache=list() addtimer(CALLBACK(src, .proc/dry), DRYING_TIME * (amount+1)) /obj/effect/decal/cleanable/blood/update_icon() - if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]" + if(basecolor == "rainbow") basecolor = get_random_colour(1) color = basecolor if(basecolor == SYNTH_BLOOD_COLOUR) @@ -184,11 +184,11 @@ var/global/list/image/splatter_cache=list() var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) if(!fleshcolor || fleshcolor == "rainbow") - fleshcolor = "#[get_random_colour(1)]" + fleshcolor = get_random_colour(1) giblets.color = fleshcolor var/icon/blood = new(base_icon,"[icon_state]",dir) - if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]" + if(basecolor == "rainbow") basecolor = get_random_colour(1) blood.Blend(basecolor,ICON_MULTIPLY) icon = blood diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index e68ce7aa4e..cf26c6463d 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -38,6 +38,12 @@ icon_state = "dirt" mouse_opacity = 0 +/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age) + .=..() + var/turf/simulated/our_turf = src.loc + if(our_turf && istype(our_turf) && our_turf.can_dirty && _age) + our_turf.dirt = 101 + /obj/effect/decal/cleanable/flour name = "flour" desc = "It's still good. Four second rule!" diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 8545ca174e..db61554bd1 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -269,7 +269,7 @@ walk_to(src, target_atom, 5) if(prob(25)) src.visible_message("\The [src] skitters[pick(" away"," around","")].") - else if(prob(5)) + else if(amount_grown < 75 && prob(5)) //vent crawl! for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) if(!v.welded) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a7b053ae93..2ed58f88ee 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -161,6 +161,10 @@ var/obj/item/organ/external/hand = H.organs_by_name[check_hand] if(istype(hand) && hand.is_usable()) return TRUE + var/mob/living/simple_mob/S = M + if(istype(S) && S.has_hands) //Are they a mob? And do they have hands? + return TRUE + return FALSE @@ -256,6 +260,15 @@ var/obj/effect/temporary_effect/item_pickup_ghost/ghost = new(old_loc) ghost.assumeform(src) ghost.animate_towards(user) + //VORESTATION EDIT START. This handles possessed items. + if(src.possessed_voice && src.possessed_voice.len && !(user.ckey in warned_of_possession)) //Is this item possessed? + warned_of_possession |= user.ckey + tgui_alert_async(user,{" + THIS ITEM IS POSSESSED BY A PLAYER CURRENTLY IN THE ROUND. This could be by anomalous means or otherwise. + If this is not something you wish to partake in, it is highly suggested you place the item back down. + If this is fine to you, ensure that the other player is fine with you doing things to them beforehand! + "},"OOC Warning") + //VORESTATION EDIT END. return /obj/item/attack_ai(mob/user as mob) @@ -814,8 +827,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. standing.alpha = alpha standing.color = color standing.layer = layer2use - if(istype(clip_mask)) //VOREStation Edit - For taur bodies/tails clipping off parts of uniforms and suits. - standing.filters += filter(type = "alpha", icon = clip_mask) if(istype(clip_mask)) //For taur bodies/tails clipping off parts of uniforms and suits. standing.filters += filter(type = "alpha", icon = clip_mask) @@ -995,3 +1006,6 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen // this gets called when the item gets chucked by the vending machine /obj/item/proc/vendor_action(var/obj/machinery/vending/V) return + +/obj/item/proc/on_holder_escape(var/obj/item/weapon/holder/H) + return diff --git a/code/game/objects/items/devices/ai_detector.dm b/code/game/objects/items/devices/ai_detector.dm index 94d3a35912..7bb92bf216 100644 --- a/code/game/objects/items/devices/ai_detector.dm +++ b/code/game/objects/items/devices/ai_detector.dm @@ -94,22 +94,22 @@ if(new_state != old_state) switch(new_state) if(PROXIMITY_OFF_CAMERANET) - to_chat(carrier, "[bicon(src)] Now outside of camera network.") + to_chat(carrier, "\icon[src][bicon(src)] Now outside of camera network.") carrier << 'sound/machines/defib_failed.ogg' if(PROXIMITY_NONE) - to_chat(carrier, "[bicon(src)] Now within camera network, AI and cameras unfocused.") + to_chat(carrier, "\icon[src][bicon(src)] Now within camera network, AI and cameras unfocused.") carrier << 'sound/machines/defib_safetyOff.ogg' if(PROXIMITY_NEAR) - to_chat(carrier, "[bicon(src)] Warning: AI focus at nearby location.") + to_chat(carrier, "\icon[src][bicon(src)] Warning: AI focus at nearby location.") carrier << 'sound/machines/defib_SafetyOn.ogg' if(PROXIMITY_ON_SCREEN) - to_chat(carrier, "[bicon(src)] Alert: AI or camera focused at current location!") + to_chat(carrier, "\icon[src][bicon(src)] Alert: AI or camera focused at current location!") carrier <<'sound/machines/defib_ready.ogg' if(PROXIMITY_TRACKING) - to_chat(carrier, "[bicon(src)] Danger: AI is actively tracking you!") + to_chat(carrier, "\icon[src][bicon(src)] Danger: AI is actively tracking you!") carrier << 'sound/machines/defib_success.ogg' if(PROXIMITY_TRACKING_FAIL) - to_chat(carrier, "[bicon(src)] Danger: AI is attempting to actively track you, but you are outside of the camera network!") + to_chat(carrier, "\icon[src][bicon(src)] Danger: AI is attempting to actively track you, but you are outside of the camera network!") carrier <<'sound/machines/defib_ready.ogg' diff --git a/code/game/objects/items/devices/communicator/UI_tgui.dm b/code/game/objects/items/devices/communicator/UI_tgui.dm index 34b0e845c2..092b45cea2 100644 --- a/code/game/objects/items/devices/communicator/UI_tgui.dm +++ b/code/game/objects/items/devices/communicator/UI_tgui.dm @@ -85,7 +85,7 @@ cam_screen.vis_contents = visible_turfs cam_background.icon_state = "clear" cam_background.fill_rect(1, 1, (video_range * 2), (video_range * 2)) - + local_skybox.cut_overlays() local_skybox.add_overlay(SSskybox.get_skybox(get_z(last_camera_turf))) local_skybox.scale_to_view(video_range * 2) @@ -381,6 +381,8 @@ exonet.send_message(their_address, "text", text) im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text)) log_pda("(COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]", usr) + var/obj/item/device/communicator/comm = exonet.get_atom_from_address(their_address) + to_chat(usr, "\icon[src][bicon(src)] Sent message to [comm.owner], \"[text]\" (Reply)") for(var/mob/M in player_list) if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 89fbdef224..8ecd9a5007 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -142,10 +142,10 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Description: Shows all the voice mobs inside the device, and their status. /obj/item/device/communicator/examine(mob/user) . = ..() - + for(var/mob/living/voice/voice in contents) . += "On the screen, you can see a image feed of [voice]." - + if(voice && voice.key) switch(voice.stat) if(CONSCIOUS) @@ -302,7 +302,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() /obj/item/device/communicator/Destroy() for(var/mob/living/voice/voice in contents) voice_mobs.Remove(voice) - to_chat(voice, "[bicon(src)] Connection timed out with remote host.") + to_chat(voice, "\icon[src][bicon(src)] Connection timed out with remote host.") qdel(voice) close_connection(reason = "Connection timed out") diff --git a/code/game/objects/items/devices/communicator/messaging.dm b/code/game/objects/items/devices/communicator/messaging.dm index d7ac0e7824..5c27d8a850 100644 --- a/code/game/objects/items/devices/communicator/messaging.dm +++ b/code/game/objects/items/devices/communicator/messaging.dm @@ -34,7 +34,7 @@ if(src in comm.voice_invites) comm.open_connection(src) return - to_chat(src, "[bicon(origin_atom)] Receiving communicator request from [origin_atom]. To answer, use the Call Communicator \ + to_chat(src, "\icon[origin_atom][bicon(origin_atom)] Receiving communicator request from [origin_atom]. To answer, use the Call Communicator \ verb, and select that name to answer the call.") src << 'sound/machines/defib_SafetyOn.ogg' comm.voice_invites |= src @@ -44,7 +44,7 @@ random = random / 10 exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") if(message == "text") - to_chat(src, "[bicon(origin_atom)] Received text message from [origin_atom]: \"[text]\"") + to_chat(src, "\icon[origin_atom][bicon(origin_atom)] Received text message from [origin_atom]: \"[text]\"") src << 'sound/machines/defib_safetyOff.ogg' exonet_messages.Add("From [origin_atom]:
    [text]") return @@ -84,7 +84,7 @@ playsound(src, S, 50, 1) for (var/mob/O in hearers(2, loc)) - O.show_message(text("[bicon(src)] *[ttone]*")) + O.show_message(text("\icon[src][bicon(src)] *[ttone]*")) alert_called = 1 update_icon() @@ -95,7 +95,7 @@ L = loc if(L) - to_chat(L, "[bicon(src)] Message from [who]: \"[text]\" (Reply)") + to_chat(L, "\icon[src][bicon(src)] Message from [who]: \"[text]\" (Reply)") // This is the only Topic the communicators really uses /obj/item/device/communicator/Topic(href, href_list) @@ -108,7 +108,7 @@ exonet.send_message(comm.exonet.address, "text", message) im_list += list(list("address" = exonet.address, "to_address" = comm.exonet.address, "im" = message)) log_pda("(COMM: [src]) sent \"[message]\" to [exonet.get_atom_from_address(comm.exonet.address)]", usr) - to_chat(usr, "[bicon(src)] Sent message to [comm.owner], \"[message]\"") + to_chat(usr, "\icon[src][bicon(src)] Sent message to [comm.owner], \"[message]\" (Reply)") // Verb: text_communicator() // Parameters: None diff --git a/code/game/objects/items/devices/communicator/phone.dm b/code/game/objects/items/devices/communicator/phone.dm index e938276bdc..671598a6ef 100644 --- a/code/game/objects/items/devices/communicator/phone.dm +++ b/code/game/objects/items/devices/communicator/phone.dm @@ -39,15 +39,15 @@ comm.voice_requests.Remove(src) if(user) - comm.visible_message("[bicon(src)] Connecting to [src].") - to_chat(user, "[bicon(src)] Attempting to call [comm].") + comm.visible_message("\icon[src][bicon(src)] Connecting to [src].") + to_chat(user, "\icon[src][bicon(src)] Attempting to call [comm].") sleep(10) - to_chat(user, "[bicon(src)] Dialing internally from [station_name()], [system_name()].") + to_chat(user, "\icon[src][bicon(src)] Dialing internally from [station_name()], [system_name()].") sleep(20) //If they don't have an exonet something is very wrong and we want a runtime. - to_chat(user, "[bicon(src)] Connection re-routed to [comm] at [comm.exonet.address].") + to_chat(user, "\icon[src][bicon(src)] Connection re-routed to [comm] at [comm.exonet.address].") sleep(40) - to_chat(user, "[bicon(src)] Connection to [comm] at [comm.exonet.address] established.") - comm.visible_message("[bicon(src)] Connection to [src] at [exonet.address] established.") + to_chat(user, "\icon[src][bicon(src)] Connection to [comm] at [comm.exonet.address] established.") + comm.visible_message("\icon[src][bicon(src)] Connection to [src] at [exonet.address] established.") sleep(20) src.add_communicating(comm) @@ -86,28 +86,28 @@ //Now for some connection fluff. if(user) - to_chat(user, "[bicon(src)] Connecting to [candidate].") - to_chat(new_voice, "[bicon(src)] Attempting to call [src].") + to_chat(user, "\icon[src][bicon(src)] Connecting to [candidate].") + to_chat(new_voice, "\icon[src][bicon(src)] Attempting to call [src].") sleep(10) - to_chat(new_voice, "[bicon(src)] Dialing to [station_name()], Kara Subsystem, [system_name()].") + to_chat(new_voice, "\icon[src][bicon(src)] Dialing to [station_name()], Kara Subsystem, [system_name()].") sleep(20) - to_chat(new_voice, "[bicon(src)] Connecting to [station_name()] telecommunications array.") + to_chat(new_voice, "\icon[src][bicon(src)] Connecting to [station_name()] telecommunications array.") sleep(40) - to_chat(new_voice, "[bicon(src)] Connection to [station_name()] telecommunications array established. Redirecting signal to [src].") + to_chat(new_voice, "\icon[src][bicon(src)] Connection to [station_name()] telecommunications array established. Redirecting signal to [src].") sleep(20) //We're connected, no need to hide everything. new_voice.client.screen.Remove(blackness) qdel(blackness) - to_chat(new_voice, "[bicon(src)] Connection to [src] established.") + to_chat(new_voice, "\icon[src][bicon(src)] Connection to [src] established.") to_chat(new_voice, "To talk to the person on the other end of the call, just talk normally.") to_chat(new_voice, "If you want to end the call, use the 'Hang Up' verb. The other person can also hang up at any time.") to_chat(new_voice, "Remember, your character does not know anything you've learned from observing!") if(new_voice.mind) new_voice.mind.assigned_role = "Disembodied Voice" if(user) - to_chat(user, "[bicon(src)] Your communicator is now connected to [candidate]'s communicator.") + to_chat(user, "\icon[src][bicon(src)] Your communicator is now connected to [candidate]'s communicator.") // Proc: close_connection() // Parameters: 3 (user - the user who initiated the disconnect, target - the mob or device being disconnected, reason - string shown when disconnected) @@ -120,8 +120,8 @@ for(var/mob/living/voice/voice in voice_mobs) //Handle ghost-callers if(target && voice != target) //If no target is inputted, it deletes all of them. continue - to_chat(voice, "[bicon(src)] [reason].") - visible_message("[bicon(src)] [reason].") + to_chat(voice, "\icon[src][bicon(src)] [reason].") + visible_message("\icon[src][bicon(src)] [reason].") voice_mobs.Remove(voice) qdel(voice) update_icon() @@ -131,8 +131,8 @@ continue src.del_communicating(comm) comm.del_communicating(src) - comm.visible_message("[bicon(src)] [reason].") - visible_message("[bicon(src)] [reason].") + comm.visible_message("\icon[src][bicon(src)] [reason].") + visible_message("\icon[src][bicon(src)] [reason].") if(comm.camera && video_source == comm.camera) //We hung up on the person on video end_video() if(camera && comm.video_source == camera) //We hung up on them while they were watching us @@ -163,7 +163,7 @@ if(ringer) playsound(src, 'sound/machines/twobeep.ogg', 50, 1) for (var/mob/O in hearers(2, loc)) - O.show_message(text("[bicon(src)] *beep*")) + O.show_message(text("\icon[src][bicon(src)] *beep*")) alert_called = 1 update_icon() @@ -174,7 +174,7 @@ L = loc if(L) - to_chat(L, "[bicon(src)] Communications request from [who].") + to_chat(L, "\icon[src][bicon(src)] Communications request from [who].") // Proc: del_request() // Parameters: 1 (candidate - the ghost or communicator to be declined) @@ -197,13 +197,13 @@ us = loc if(us) - to_chat(us, "[bicon(src)] Declined request.") + to_chat(us, "\icon[src][bicon(src)] Declined request.") // Proc: see_emote() // Parameters: 2 (M - the mob the emote originated from, text - the emote's contents) // Description: Relays the emote to all linked communicators. /obj/item/device/communicator/see_emote(mob/living/M, text) - var/rendered = "[bicon(src)] [text]" + var/rendered = "\icon[src][bicon(src)] [text]" for(var/obj/item/device/communicator/comm in communicating) var/turf/T = get_turf(comm) if(!T) return @@ -250,14 +250,14 @@ var/message = combined["formatted"] var/name_used = M.GetVoice() var/rendered = null - rendered = "[bicon(src)] [name_used] [message]" + rendered = "\icon[src][bicon(src)] [name_used] [message]" mob.show_message(rendered, 2) // Proc: show_message() // Parameters: 4 (msg - the message, type - number to determine if message is visible or audible, alt - unknown, alt_type - unknown) // Description: Relays the message to all linked communicators. /obj/item/device/communicator/show_message(msg, type, alt, alt_type) - var/rendered = "[bicon(src)] [msg]" + var/rendered = "\icon[src][bicon(src)] [msg]" for(var/obj/item/device/communicator/comm in communicating) var/turf/T = get_turf(comm) if(!T) return @@ -339,15 +339,15 @@ return if(!(src in comm.communicating) || !comm.camera) //You called someone with a broken communicator or one that's fake or yourself or something - to_chat(user, "[bicon(src)]ERROR: Video failed. Either bandwidth is too low, or the other communicator is malfunctioning.") + to_chat(user, "\icon[src][bicon(src)]ERROR: Video failed. Either bandwidth is too low, or the other communicator is malfunctioning.") return - to_chat(user, "[bicon(src)] Attempting to start video over existing call.") + to_chat(user, "\icon[src][bicon(src)] Attempting to start video over existing call.") sleep(30) - to_chat(user, "[bicon(src)] Please wait...") + to_chat(user, "\icon[src][bicon(src)] Please wait...") video_source = comm.camera - comm.visible_message("[bicon(src)] New video connection from [comm].") + comm.visible_message("\icon[src][bicon(src)] New video connection from [comm].") update_active_camera_screen() GLOB.moved_event.register(video_source, src, .proc/update_active_camera_screen) update_icon() @@ -360,7 +360,7 @@ show_static() video_source = null - . = "[bicon(src)] [reason ? reason : "Video session ended"]." + . = "\icon[src][bicon(src)] [reason ? reason : "Video session ended"]." visible_message(.) update_icon() diff --git a/code/game/objects/items/devices/geiger.dm b/code/game/objects/items/devices/geiger.dm index 2b7a31eb2c..d127fe9404 100644 --- a/code/game/objects/items/devices/geiger.dm +++ b/code/game/objects/items/devices/geiger.dm @@ -65,7 +65,7 @@ STOP_PROCESSING(SSobj, src) update_icon() update_sound() - to_chat(user, "[bicon(src)] You switch [scanning ? "on" : "off"] \the [src].") + to_chat(user, "\icon[src][bicon(src)] You switch [scanning ? "on" : "off"] \the [src].") /obj/item/device/geiger/update_icon() if(!scanning) diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm index e92c45e151..5d6b46c6a7 100644 --- a/code/game/objects/items/devices/hacktool.dm +++ b/code/game/objects/items/devices/hacktool.dm @@ -47,7 +47,7 @@ to_chat(user, "You are already hacking!") return 0 if(!is_type_in_list(target, supported_types)) - to_chat(user, "[bicon(src)] Unable to hack this target!") + to_chat(user, "\icon[src][bicon(src)] Unable to hack this target!") return 0 var/found = known_targets.Find(target) if(found) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 380c5f8e63..a944d8c172 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -23,7 +23,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) icon_state = "pai" item_state = "electronic" w_class = ITEMSIZE_SMALL - slot_flags = SLOT_BELT + slot_flags = SLOT_BELT | SLOT_HOLSTER origin_tech = list(TECH_DATA = 2) show_messages = 0 preserve_item = 1 @@ -58,11 +58,24 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) /obj/item/device/paicard/attack_ghost(mob/user as mob) if(pai != null) //Have a person in them already? return ..() - + if(is_damage_critical()) + to_chat(usr, "That card is too damaged to activate!") + return + var/time_till_respawn = user.time_till_respawn() + if(time_till_respawn == -1) // Special case, never allowed to respawn + to_chat(usr, "Respawning is not allowed!") + else if(time_till_respawn) // Nonzero time to respawn + to_chat(usr, "You can't do that yet! You died too recently. You need to wait another [round(time_till_respawn/10/60, 0.1)] minutes.") + return if(jobban_isbanned(usr, "pAI")) to_chat(usr,"You cannot join a pAI card when you are banned from playing as a pAI.") return + for(var/ourkey in paikeys) + if(ourkey == user.ckey) + to_chat(usr, "You can't just rejoin any old pAI card!!! Your card still exists.") + return + var/choice = tgui_alert(user, "You sure you want to inhabit this PAI, or submit yourself to being recruited?", "Confirmation", list("Inhabit", "Recruit", "Cancel")) if(choice == "Cancel") return ..() @@ -81,12 +94,14 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) var/obj/item/device/paicard/typeb/card = new(location) var/mob/living/silicon/pai/new_pai = new(card) new_pai.key = user.key + paikeys |= new_pai.ckey card.setPersonality(new_pai) new_pai.SetName(actual_pai_name) else var/obj/item/device/paicard/card = new(location) var/mob/living/silicon/pai/new_pai = new(card) new_pai.key = user.key + paikeys |= new_pai.ckey card.setPersonality(new_pai) new_pai.SetName(actual_pai_name) @@ -95,6 +110,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) var/obj/item/device/paicard/typeb/card = new(location) var/mob/living/silicon/pai/new_pai = new(card) new_pai.key = user.key + paikeys |= new_pai.ckey card.setPersonality(new_pai) if(!new_pai.savefile_load(new_pai)) var/pai_name = tgui_input_text(new_pai, "Choose your character's name", "Character Name") @@ -105,6 +121,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) var/obj/item/device/paicard/card = new(location) var/mob/living/silicon/pai/new_pai = new(card) new_pai.key = user.key + paikeys |= new_pai.ckey card.setPersonality(new_pai) if(!new_pai.savefile_load(new_pai)) var/pai_name = tgui_input_text(new_pai, "Choose your character's name", "Character Name") @@ -117,7 +134,10 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) // VOREStation Edit End -/obj/item/device/paicard/attack_self(mob/user) +/obj/item/device/paicard/proc/access_screen(mob/user) + if(is_damage_critical()) + to_chat(user, "WARNING: CRITICAL HARDWARE FAILURE, SERVICE DEVICE IMMEDIATELY") + return if (!in_range(src, user)) return user.set_machine(src) @@ -222,8 +242,10 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) Personal AI Device

    - - + + + + @@ -511,6 +533,5 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) return pick(/obj/item/device/paicard ,/obj/item/device/paicard/typeb) /obj/item/device/paicard/digest_act(var/atom/movable/item_storage = null) - if(!pai.digestable) - return - . = ..() + if(pai.digestable) + return ..() diff --git a/code/game/objects/items/devices/paicard_vr.dm b/code/game/objects/items/devices/paicard_vr.dm new file mode 100644 index 0000000000..7283966d47 --- /dev/null +++ b/code/game/objects/items/devices/paicard_vr.dm @@ -0,0 +1,385 @@ +#define PP_FUNCTIONAL 0 +#define PP_BROKEN 1 +#define PP_MISSING 2 + +var/global/list/paikeys = list() + +/obj/item/device/paicard + var/panel_open = FALSE + var/cell = PP_FUNCTIONAL //critical- power + var/processor = PP_FUNCTIONAL //critical- the thinky part + var/board = PP_FUNCTIONAL //critical- makes everything work + var/capacitor = PP_FUNCTIONAL //critical- power processing + var/projector = PP_FUNCTIONAL //non-critical- affects unfolding + var/emitter = PP_FUNCTIONAL //non-critical- affects unfolding + var/speech_synthesizer = PP_FUNCTIONAL //non-critical- affects speech + +/obj/item/device/paicard/attackby(var/obj/item/I as obj, mob/user as mob) + if(istype(I,/obj/item/weapon/tool/screwdriver)) + if(panel_open) + panel_open = FALSE + user.visible_message("\The [user] secured \the [src]'s maintenance panel.") + playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + else if(pai) + if(do_after(user, 3 SECONDS)) + panel_open = TRUE + user.visible_message("\The [user] opened \the [src]'s maintenance panel.") + playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + if(istype(I,/obj/item/device/robotanalyzer)) + if(!panel_open) + to_chat(user, "The panel isn't open. You will need to unscrew it to open it.") + else + if(cell == PP_FUNCTIONAL) + to_chat(user,"Power cell: functional") + else if(cell == PP_BROKEN) + to_chat(user,"Power cell: damaged - CRITICAL") + else + to_chat(user,"Power cell: missing - CRITICAL") + + if(processor == PP_FUNCTIONAL) + to_chat(user,"Processor: functional") + else if(processor == PP_BROKEN) + to_chat(user,"Processor: damaged - CRITICAL") + else + to_chat(user,"Processor: missing - CRITICAL") + + if(board == PP_FUNCTIONAL) + to_chat(user,"Board: functional") + else if(board == PP_BROKEN) + to_chat(user,"Board: damaged - CRITICAL") + else + to_chat(user,"Board: missing - CRITICAL") + + if(capacitor == PP_FUNCTIONAL) + to_chat(user,"Capacitors: functional") + else if(capacitor == PP_BROKEN) + to_chat(user,"Capacitors: damaged - CRITICAL") + else + to_chat(user,"Capacitors: missing - CRITICAL") + + if(projector == PP_FUNCTIONAL) + to_chat(user,"Projectors: functional") + else if(projector == PP_BROKEN) + to_chat(user,"Projectors: damaged") + else + to_chat(user,"Projectors: missing") + + if(emitter == PP_FUNCTIONAL) + to_chat(user,"Emitters: functional") + else if(emitter == PP_BROKEN) + to_chat(user,"Emitters: damaged") + else + to_chat(user,"Emitters: missing") + + if(speech_synthesizer == PP_FUNCTIONAL) + to_chat(user,"Speech Synthesizer: functional") + else if(speech_synthesizer == PP_BROKEN) + to_chat(user,"Speech Synthesizer: damaged") + else + to_chat(user,"Speech Synthesizer: missing") + + if(istype(I,/obj/item/device/multitool)) + if(!panel_open) + to_chat(user, "You can't do that in this state.") + else + var/list/parts = list() + if(cell != PP_MISSING) + parts |= "cell" + if(processor != PP_MISSING) + parts |= "processor" + if(board != PP_MISSING) + parts |= "board" + if(capacitor != PP_MISSING) + parts |= "capacitor" + if(projector != PP_MISSING) + parts |= "projector" + if(emitter != PP_MISSING) + parts |= "emitter" + if(speech_synthesizer != PP_MISSING) + parts |= "speech synthesizer" + + var/choice = tgui_input_list(user, "Which part would you like to check?", "Check part", parts) + switch(choice) + if("cell") + if(cell == PP_FUNCTIONAL) + to_chat(user,"Power cell: functional") + else if(speech_synthesizer == PP_BROKEN) + to_chat(user,"Power cell: damaged") + else + to_chat(user,"Power cell: missing") + + if("processor") + if(processor == PP_FUNCTIONAL) + to_chat(user,"Processor: functional") + else if(speech_synthesizer == PP_BROKEN) + to_chat(user,"Processor: damaged") + else + to_chat(user,"Processor: missing") + + if("board") + if(board == PP_FUNCTIONAL) + to_chat(user,"Board: functional") + else if(speech_synthesizer == PP_BROKEN) + to_chat(user,"Board: damaged") + else + to_chat(user,"Board: missing") + + if("capacitor") + if(capacitor == PP_FUNCTIONAL) + to_chat(user,"Capacitors: functional") + else if(speech_synthesizer == PP_BROKEN) + to_chat(user,"Capacitors: damaged") + else + to_chat(user,"Capacitors: missing") + + if("projector") + if(projector == PP_FUNCTIONAL) + to_chat(user,"Projectors: functional") + else if(speech_synthesizer == PP_BROKEN) + to_chat(user,"Projectors: damaged") + else + to_chat(user,"Projectors: missing") + + if("emitter") + if(emitter == PP_FUNCTIONAL) + to_chat(user,"Emitters: functional") + else if(speech_synthesizer == PP_BROKEN) + to_chat(user,"Emitters: damaged") + else + to_chat(user,"Emitters: missing") + + if("speech synthesizer") + if(speech_synthesizer == PP_FUNCTIONAL) + to_chat(user,"Speech Synthesizer: functional") + else if(speech_synthesizer == PP_BROKEN) + to_chat(user,"Speech Synthesizer: damaged") + else + to_chat(user,"Speech Synthesizer: missing") + + if(istype(I,/obj/item/paiparts/cell)) + if(cell == PP_MISSING) + if(do_after(user, 3 SECONDS)) + user.visible_message("\The [user] installs \the [I] into \the [src].","You install \the [I] into \the [src].") + cell = PP_FUNCTIONAL + user.drop_from_inventory(I) + qdel(I) + else + to_chat(user, "You would need to remove the installed [I] first!") + if(istype(I,/obj/item/paiparts/processor)) + if(processor == PP_MISSING) + if(do_after(user, 3 SECONDS)) + user.visible_message("\The [user] installs \the [I] into \the [src].","You install \the [I] into \the [src].") + processor = PP_FUNCTIONAL + user.drop_from_inventory(I) + qdel(I) + else + to_chat(user, "You would need to remove the installed [I] first!") + if(istype(I,/obj/item/paiparts/board)) + if(board == PP_MISSING) + if(do_after(user, 3 SECONDS)) + user.visible_message("\The [user] installs \the [I] into \the [src].","You install \the [I] into \the [src].") + board = PP_FUNCTIONAL + user.drop_from_inventory(I) + qdel(I) + else + to_chat(user, "You would need to remove the installed [I] first!") + if(istype(I,/obj/item/paiparts/capacitor)) + if(capacitor == PP_MISSING) + if(do_after(user, 3 SECONDS)) + user.visible_message("\The [user] installs \the [I] into \the [src].","You install \the [I] into \the [src].") + capacitor = PP_FUNCTIONAL + user.drop_from_inventory(I) + qdel(I) + else + to_chat(user, "You would need to remove the installed [I] first!") + if(istype(I,/obj/item/paiparts/projector)) + if(projector == PP_MISSING) + if(do_after(user, 3 SECONDS)) + user.visible_message("\The [user] installs \the [I] into \the [src].","You install \the [I] into \the [src].") + projector = PP_FUNCTIONAL + user.drop_from_inventory(I) + qdel(I) + else + to_chat(user, "You would need to remove the installed [I] first!") + if(istype(I,/obj/item/paiparts/emitter)) + if(emitter == PP_MISSING) + if(do_after(user, 3 SECONDS)) + user.visible_message("\The [user] installs \the [I] into \the [src].","You install \the [I] into \the [src].") + emitter = PP_FUNCTIONAL + user.drop_from_inventory(I) + qdel(I) + else + to_chat(user, "You would need to remove the installed [I] first!") + if(istype(I,/obj/item/paiparts/speech_synthesizer)) + if(speech_synthesizer == PP_MISSING) + if(do_after(user, 3 SECONDS)) + user.visible_message("\The [user] installs \the [I] into \the [src].","You install \the [I] into \the [src].") + speech_synthesizer = PP_FUNCTIONAL + user.drop_from_inventory(I) + qdel(I) + else + to_chat(user, "You would need to remove the installed [I] first!") + +/obj/item/device/paicard/attack_self(mob/user) + if(!panel_open) + access_screen(user) + return + var/list/parts = list() + if(cell != PP_MISSING) + parts |= "cell" + if(processor != PP_MISSING) + parts |= "processor" + if(board != PP_MISSING) + parts |= "board" + if(capacitor != PP_MISSING) + parts |= "capacitor" + if(projector != PP_MISSING) + parts |= "projector" + if(emitter != PP_MISSING) + parts |= "emitter" + if(speech_synthesizer != PP_MISSING) + parts |= "speech synthesizer" + + var/choice = tgui_input_list(user, "Which part would you like to remove?", "Remove part", parts) + if(choice) + playsound(src, 'sound/items/pickup/component.ogg', vary = TRUE) + else + return + if(!do_after(user, 3 SECONDS)) + return + switch(choice) + if("cell") + if(cell == PP_FUNCTIONAL) + new /obj/item/paiparts/capacitor(get_turf(user)) + else + new /obj/item/paiparts(get_turf(user)) + user.visible_message("\The [user] removes \the [choice] from \the [src].","You remove \the [choice] from \the [src].") + cell = PP_MISSING + if("processor") + if(processor == PP_FUNCTIONAL) + new /obj/item/paiparts/capacitor(get_turf(user)) + else + new /obj/item/paiparts(get_turf(user)) + user.visible_message("\The [user] removes \the [choice] from \the [src].","You remove \the [choice] from \the [src].") + processor = PP_MISSING + if("board") + board = PP_MISSING + if(board == PP_FUNCTIONAL) + new /obj/item/paiparts/capacitor(get_turf(user)) + else + new /obj/item/paiparts(get_turf(user)) + user.visible_message("\The [user] removes \the [choice] from \the [src].","You remove \the [choice] from \the [src].") + + if("capacitor") + if(capacitor == PP_FUNCTIONAL) + new /obj/item/paiparts/capacitor(get_turf(user)) + else + new /obj/item/paiparts(get_turf(user)) + user.visible_message("\The [user] removes \the [choice] from \the [src].","You remove \the [choice] from \the [src].") + capacitor = PP_MISSING + if("projector") + if(projector == PP_FUNCTIONAL) + new /obj/item/paiparts/capacitor(get_turf(user)) + else + new /obj/item/paiparts(get_turf(user)) + user.visible_message("\The [user] removes \the [choice] from \the [src].","You remove \the [choice] from \the [src].") + projector = PP_MISSING + if("emitter") + if(emitter == PP_FUNCTIONAL) + new /obj/item/paiparts/capacitor(get_turf(user)) + else + new /obj/item/paiparts(get_turf(user)) + user.visible_message("\The [user] removes \the [choice] from \the [src].","You remove \the [choice] from \the [src].") + emitter = PP_MISSING + if("speech synthesizer") + if(speech_synthesizer == PP_FUNCTIONAL) + new /obj/item/paiparts/capacitor(get_turf(user)) + else + new /obj/item/paiparts(get_turf(user)) + user.visible_message("\The [user] removes \the [choice] from \the [src].","You remove \the [choice] from \the [src].") + speech_synthesizer = PP_MISSING + +/obj/item/device/paicard/proc/death_damage() + + var/number = rand(1,4) + while(number) + number -- + switch(rand(1,4)) + if(1) + cell = PP_BROKEN + if(2) + processor = PP_BROKEN + if(3) + board = PP_BROKEN + if(4) + capacitor = PP_BROKEN + + +/obj/item/device/paicard/proc/damage_random_component(nonfatal = FALSE) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, src) + s.start() + if(prob(80) || nonfatal) //Way more likely to be non-fatal part damage + switch(rand(1,3)) + if(1) + projector = PP_BROKEN + if(2) + emitter = PP_BROKEN + if(3) + speech_synthesizer = PP_BROKEN + else + switch(rand(1,4)) + if(1) + cell = PP_BROKEN + if(2) + processor = PP_BROKEN + if(3) + board = PP_BROKEN + if(4) + capacitor = PP_BROKEN + +/obj/item/device/paicard/proc/is_damage_critical() + if(cell != PP_FUNCTIONAL || processor != PP_FUNCTIONAL || board != PP_FUNCTIONAL || capacitor != PP_FUNCTIONAL) + return TRUE + return FALSE + +/obj/item/paiparts + name = "broken pAI component" + desc = "It's broken scrap from a pAI card!" + icon = 'icons/obj/paicard.dmi' + icon_state = "broken" + pickup_sound = 'sound/items/pickup/card.ogg' + drop_sound = 'sound/items/drop/card.ogg' +/obj/item/paiparts/Initialize() + . = ..() + pixel_x = rand(-10,10) + pixel_y = rand(-10,10) + +/obj/item/paiparts/cell + name = "pAI power cell" + desc = "It's very small and efficient! It powers the pAI!" + icon_state = "cell" +/obj/item/paiparts/processor + name = "pAI processor" + desc = "It's the brain of your computer friend!" + icon_state = "processor" +/obj/item/paiparts/board + name = "pAI board" + desc = "It's the thing all the other parts get attatched to!" + icon_state = "board" +/obj/item/paiparts/capacitor + name = "pAI capacitor" + desc = "It helps regulate power flow!" + icon_state = "capacitor" +/obj/item/paiparts/projector + name = "pAI projector" + desc = "It projects the pAI's form!" + icon_state = "projector" +/obj/item/paiparts/emitter + name = "pAI emitter" + desc = "It emits the fields to help the pAI get around!" + icon_state = "emitter" +/obj/item/paiparts/speech_synthesizer + name = "pAI speech synthesizer" + desc = "It's a little voice box!" + icon_state = "speech_synthesizer" diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index b7304fa8a1..e8ba830cae 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -491,7 +491,7 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer) var/list/jamming = is_jammed(src) if(jamming) var/distance = jamming["distance"] - to_chat(M, "[bicon(src)] You hear the [distance <= 2 ? "loud hiss" : "soft hiss"] of static.") + to_chat(M, "\icon[src][bicon(src)] You hear the [distance <= 2 ? "loud hiss" : "soft hiss"] of static.") return FALSE // First, we want to generate a new radio signal diff --git a/code/game/objects/items/devices/radio/radio_ch.dm b/code/game/objects/items/devices/radio/radio_ch.dm index aa4759823f..08b3b624f9 100644 --- a/code/game/objects/items/devices/radio/radio_ch.dm +++ b/code/game/objects/items/devices/radio/radio_ch.dm @@ -49,4 +49,27 @@ if(!broadcast_tiles) update_broadcast_tiles() return broadcast_tiles -#undef CANBROADCAST_INNERBOX + +//*Subspace Radio*// +/obj/item/device/radio/subspace + adhoc_fallback = 1 + canhear_range = 8 + desc = "A heavy duty radio that can pick up all manor of shortwave and subspace frequencies. It's a bit bulkier than a normal radio thanks to the extra hardware." + description_info = "This radio can broadcast over any headset frequency that the user has access to. It has a shortwave fallback to directly broadcast to all radio equipment on the same Z-Level/Map in the event of a telecommunications failure. This device requires a functioning Telecommunications Network/Relay to send and receive signals meant for headsets. Additionally, the volume knob seems to be stuck on the max setting. You could hear this thing clear across a room... Not good for discretely listening in on secure channels or being stealthy!" + icon_state = "radio" + name = "subspace radio" + subspace_transmission = 1 + throwforce = 5 + throw_range = 7 + throw_speed = 1 + +//* Bluespace Radio *// +/obj/item/device/bluespaceradio/southerncross_prelinked + name = "bluespace radio (southerncross)" + handset = /obj/item/device/radio/bluespacehandset/linked/southerncross_prelinked + +/obj/item/device/radio/bluespacehandset/linked/southerncross_prelinked + bs_tx_preload_id = "Receiver A" //Transmit to a receiver + bs_rx_preload_id = "Broadcaster A" //Recveive from a transmitter + +#undef CANBROADCAST_INNERBOX \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners/gas.dm b/code/game/objects/items/devices/scanners/gas.dm index ca35911448..9fbc319d6d 100644 --- a/code/game/objects/items/devices/scanners/gas.dm +++ b/code/game/objects/items/devices/scanners/gas.dm @@ -23,7 +23,7 @@ /obj/item/device/analyzer/attack_self(mob/user as mob) if (user.stat) return - if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(usr, "You don't have the dexterity to do this!") return diff --git a/code/game/objects/items/devices/scanners/health.dm b/code/game/objects/items/devices/scanners/health.dm index ae2683ede0..ba1c960d9d 100644 --- a/code/game/objects/items/devices/scanners/health.dm +++ b/code/game/objects/items/devices/scanners/health.dm @@ -41,7 +41,7 @@ dat += "Body Temperature: ???" user.show_message("[dat]", 1) return - if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return diff --git a/code/game/objects/items/devices/scanners/mass_spectrometer.dm b/code/game/objects/items/devices/scanners/mass_spectrometer.dm index fee41eb880..5c044fc535 100644 --- a/code/game/objects/items/devices/scanners/mass_spectrometer.dm +++ b/code/game/objects/items/devices/scanners/mass_spectrometer.dm @@ -30,7 +30,7 @@ /obj/item/device/mass_spectrometer/attack_self(mob/user as mob) if (user.stat) return - if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return if(reagents.total_volume) diff --git a/code/game/objects/items/devices/text_to_speech.dm b/code/game/objects/items/devices/text_to_speech.dm index 330ca97d73..c97693ed5f 100644 --- a/code/game/objects/items/devices/text_to_speech.dm +++ b/code/game/objects/items/devices/text_to_speech.dm @@ -24,7 +24,7 @@ var/message = sanitize(tgui_input_text(user,"Choose a message to relay to those around you.")) if(message) - audible_message("[bicon(src)] \The [src.name] states, \"[message]\"", runemessage = "synthesized speech") + audible_message("\icon[src][bicon(src)] \The [src.name] states, \"[message]\"", runemessage = "synthesized speech") if(ismob(loc)) loc.audible_message("", runemessage = "\[TTS Voice\] [message]") diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index 78f5a381c7..849a649894 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -48,7 +48,7 @@ add_fingerprint(user) user.set_machine(src) show_ui(user) - + /obj/item/device/tvcamera/proc/show_ui(mob/user) var/dat = list() dat += "Channel name is: [channel ? channel : "unidentified broadcast"]
    " @@ -93,7 +93,7 @@ /obj/item/device/tvcamera/proc/show_tvs(atom/thing) if(showing) hide_tvs(showing) - + showing = weakref(thing) showing_name = "[thing]" for(var/obj/machinery/computer/security/telescreen/entertainment/ES as anything in GLOB.entertainment_screens) @@ -126,7 +126,7 @@ /obj/item/device/tvcamera/process() if(!showing) return PROCESS_KILL - + var/atom/A = showing.resolve() if(!A || QDELETED(A)) show_tvs(loc) @@ -148,3 +148,76 @@ H.update_inv_l_hand() H.update_inv_belt() + +//Assembly by roboticist + +/obj/item/robot_parts/head/attackby(var/obj/item/device/assembly/S, mob/user as mob) + if(!istype(S, /obj/item/device/assembly/infra)) + ..() + return + var/obj/item/weapon/TVAssembly/A = new(user) + qdel(S) + user.put_in_hands(A) + to_chat(user, "You add the infrared sensor to the robot head.") + user.drop_from_inventory(src) + qdel(src) + + +/obj/item/weapon/TVAssembly + name = "\improper TV Camera Assembly" + desc = "A robotic head with an infrared sensor inside." + icon = 'icons/obj/robot_parts.dmi' + icon_state = "head" + item_state = "head" + var/buildstep = 0 + w_class = ITEMSIZE_LARGE + +/obj/item/weapon/TVAssembly/attackby(W, mob/user) + switch(buildstep) + if(0) + if(istype(W, /obj/item/robot_parts/robot_component/camera)) + var/obj/item/robot_parts/robot_component/camera/CA = W + to_chat(user, "You add the camera module to [src]") + user.drop_item() + qdel(CA) + desc = "This TV camera assembly has a camera module." + buildstep++ + if(1) + if(istype(W, /obj/item/device/taperecorder)) + var/obj/item/device/taperecorder/T = W + user.drop_item() + qdel(T) + buildstep++ + to_chat(user, "You add the tape recorder to [src]") + if(2) + if(istype(W, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = W + if(!C.use(3)) + to_chat(user, "You need six cable coils to wire the devices.") + ..() + return + C.use(3) + buildstep++ + to_chat(user, "You wire the assembly") + desc = "This TV camera assembly has wires sticking out" + return + if(3) + if(istype(W, /obj/item/weapon/tool/wirecutters)) + to_chat(user, " You trim the wires.") + buildstep++ + desc = "This TV camera assembly needs casing." + return + if(4) + if(istype(W, /obj/item/stack/material/steel)) + var/obj/item/stack/material/steel/S = W + buildstep++ + S.use(1) + to_chat(user, "You encase the assembly in a Ward-Takeshi casing.") + var/turf/T = get_turf(src) + new /obj/item/device/tvcamera(T) + user.drop_from_inventory(src) + qdel(src) + return + + ..() + diff --git a/code/game/objects/items/gunbox_vr.dm b/code/game/objects/items/gunbox_vr.dm index 2770745f39..4dbbb98b27 100644 --- a/code/game/objects/items/gunbox_vr.dm +++ b/code/game/objects/items/gunbox_vr.dm @@ -19,3 +19,26 @@ if(istype(AM, /obj/item/weapon/gun)) to_chat(user, "You have chosen \the [AM]. Say hello to your new best friend.") qdel(src) + +/* + * Site Manager's Box + */ +/obj/item/gunbox/captain + name = "Captain's sidearm box" + desc = "A secure box containing a sidearm befitting of the site manager. Includes both lethal and non-lethal munitions, beware what's loaded!" + icon = 'icons/obj/storage.dmi' + icon_state = "gunbox" +/obj/item/gunbox/captain/attack_self(mob/living/user) + var/list/options = list() + options["M1911 (.45)"] = list(/obj/item/weapon/gun/projectile/colt/detective, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45) + options["MT Mk58 (.45)"] = list(/obj/item/weapon/gun/projectile/sec, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45) + options["LAEP80 \"Thor\" (Stun/Laser)"] = list(/obj/item/weapon/gun/energy/gun, /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon) + options["MarsTech P92X (9mm)"] = list(/obj/item/weapon/gun/projectile/p92x/rubber, /obj/item/ammo_magazine/m9mm/rubber, /obj/item/ammo_magazine/m9mm) + var/choice = tgui_input_list(user,"Would you prefer a ballistic pistol or an energy gun?", "Gun!", options) + if(src && choice) + var/list/things_to_spawn = options[choice] + for(var/new_type in things_to_spawn) // Spawn all the things, the gun and the ammo. + var/atom/movable/AM = new new_type(get_turf(src)) + if(istype(AM, /obj/item/weapon/gun)) + to_chat(user, "You have chosen \the [AM]. Say hello to your new friend.") + qdel(src) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index ac184ea558..2a79c6aaac 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -69,6 +69,7 @@ R.key = ghost.key R.set_stat(CONSCIOUS) + R.add_robot_verbs() dead_mob_list -= R living_mob_list |= R R.notify_ai(ROBOT_NOTIFICATION_NEW_UNIT) @@ -207,7 +208,6 @@ R.add_language(LANGUAGE_SIIK, 1) R.add_language(LANGUAGE_AKHANI, 1) R.add_language(LANGUAGE_SKRELLIAN, 1) - R.add_language(LANGUAGE_SKRELLIANFAR, 0) R.add_language(LANGUAGE_GUTTER, 1) R.add_language(LANGUAGE_SCHECHI, 1) R.add_language(LANGUAGE_ROOTLOCAL, 1) diff --git a/code/game/objects/items/robot/robot_upgrades_vr.dm b/code/game/objects/items/robot/robot_upgrades_vr.dm index 499d535a5c..72707e5048 100644 --- a/code/game/objects/items/robot/robot_upgrades_vr.dm +++ b/code/game/objects/items/robot/robot_upgrades_vr.dm @@ -6,7 +6,7 @@ R.add_language(LANGUAGE_ECUREUILIAN, 1) R.add_language(LANGUAGE_DAEMON, 1) R.add_language(LANGUAGE_ENOCHIAN, 1) - R.add_language(LANGUAGE_SLAVIC, 1) + R.add_language(LANGUAGE_SLAVIC, 1) //CHOMP reAdd R.add_language(LANGUAGE_DRUDAKAR, 1) R.add_language(LANGUAGE_TAVAN, 1) return 1 @@ -203,4 +203,4 @@ if(T) to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!") to_chat(usr, "There's no mounting point for the module!") - return 0 \ No newline at end of file + return 0 diff --git a/code/game/objects/items/selectable_item_vr.dm b/code/game/objects/items/selectable_item_vr.dm index 33b810d8d7..56d4778124 100644 --- a/code/game/objects/items/selectable_item_vr.dm +++ b/code/game/objects/items/selectable_item_vr.dm @@ -14,7 +14,7 @@ tgui_alert(user, {"[preface_string]"}, preface_title) var/chosen_item = tgui_input_list(usr, selection_string, selection_title, item_options) chosen_item = item_options[chosen_item] - if(chosen_item) + if(!QDELETED(src) && chosen_item) user.drop_item() var/obj/item/result = new chosen_item(get_turf(user)) user.put_in_active_hand(result) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index f065ec3ea1..9676919792 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -20,8 +20,7 @@ to_chat(user, "\The [src] cannot be applied to [M]!") return 1 - if ( ! (istype(user, /mob/living/carbon/human) || \ - istype(user, /mob/living/silicon)) ) + if (!M.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return 1 @@ -129,7 +128,7 @@ if(used >= available) to_chat(user, "You run out of [src]!") break - + if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ "You bandage \a [W.desc] on [M]'s [affecting.name]." ) diff --git a/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm b/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm index a1ba9ae0e2..deec4b6964 100644 --- a/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm +++ b/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm @@ -44,6 +44,22 @@ name = "stack of happy carpet" type_to_spawn = /obj/item/stack/tile/carpet/happy +/obj/fiftyspawner/brncarpet + name = "stack of brown carpet" + type_to_spawn = /obj/item/stack/tile/carpet/brncarpet + +/obj/fiftyspawner/blucarpet2 + name = "stack of blue carpet" + type_to_spawn = /obj/item/stack/tile/carpet/blucarpet2 + +/obj/fiftyspawner/greencarpet + name = "stack of green carpet" + type_to_spawn = /obj/item/stack/tile/carpet/greencarpet + +/obj/fiftyspawner/purplecarpet + name = "stack of purple carpet" + type_to_spawn = /obj/item/stack/tile/carpet/purplecarpet + /obj/fiftyspawner/floor name = "stack of floor tiles" type_to_spawn = /obj/item/stack/tile/floor diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index c878032b4c..d67d4f503b 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -167,7 +167,15 @@ icon_state = "tile-carpet" /obj/item/stack/tile/carpet/oracarpet icon_state = "tile-carpet" - */ +/obj/item/stack/tile/carpet/brncarpet + icon_state = "tile-carpet" +/obj/item/stack/tile/carpet/blucarpet2 + icon_state = "tile-carpet" +/obj/item/stack/tile/carpet/greencarpet + icon_state = "tile-carpet" +/obj/item/stack/tile/carpet/purplecarpet + icon_state = "tile-carpet" +*/ /obj/item/stack/tile/floor name = "floor tile" diff --git a/code/game/objects/items/stacks/tiles/tile_types_ch.dm b/code/game/objects/items/stacks/tiles/tile_types_ch.dm index eeac79667e..447b6735dc 100644 --- a/code/game/objects/items/stacks/tiles/tile_types_ch.dm +++ b/code/game/objects/items/stacks/tiles/tile_types_ch.dm @@ -103,6 +103,18 @@ icon_state = "tile-carpet" default_type = MAT_CARPET_ORANGE +/obj/item/stack/tile/carpet/brncarpet + icon_state = "tile-carpet" + +/obj/item/stack/tile/carpet/blucarpet2 + icon_state = "tile-carpet" + +/obj/item/stack/tile/carpet/greencarpet + icon_state = "tile-carpet" + +/obj/item/stack/tile/carpet/purplecarpet + icon_state = "tile-carpet" + /obj/item/stack/tile/carpet/geo icon_state = "tile-carpet-deco" desc = "A piece of carpet with a gnarly geometric design. It is the same size as a normal floor tile!" diff --git a/code/game/objects/items/toys/toys_vr.dm b/code/game/objects/items/toys/toys_vr.dm index 2fca91a496..386d73aaa9 100644 --- a/code/game/objects/items/toys/toys_vr.dm +++ b/code/game/objects/items/toys/toys_vr.dm @@ -92,16 +92,20 @@ attack_verb = list("beeped", "booped", "pinged") /obj/item/toy/plushie/borgplushie/medihound + name = "medihound plushie" icon_state = "medihound" /obj/item/toy/plushie/borgplushie/scrubpuppy + name = "janihound plushie" icon_state = "scrubpuppy" /obj/item/toy/plushie/borgplushie/drakiesec + name = "security drake plushie" icon = 'icons/obj/drakietoy_vr.dmi' icon_state = "secdrake" /obj/item/toy/plushie/borgplushie/drakiemed + name = "medical drake plushie" icon = 'icons/obj/drakietoy_vr.dmi' icon_state = "meddrake" @@ -620,7 +624,7 @@ /obj/item/toy/minigibber/attackby(obj/O, mob/user, params) if(istype(O,/obj/item/toy/figure) || istype(O,/obj/item/toy/character) && O.loc == user) - to_chat(user, "You start feeding \the [O] [bicon(O)] into \the [src]'s mini-input.") + to_chat(user, "You start feeding \the [O] \icon[O][bicon(O)] into \the [src]'s mini-input.") if(do_after(user, 10, target = src)) if(O.loc != user) to_chat(user, "\The [O] is too far away to feed into \the [src]!") diff --git a/code/game/objects/items/weapons/explosives_vr.dm b/code/game/objects/items/weapons/explosives_vr.dm index fb065b7bf9..8d5bb8c961 100644 --- a/code/game/objects/items/weapons/explosives_vr.dm +++ b/code/game/objects/items/weapons/explosives_vr.dm @@ -8,7 +8,7 @@ target = src var/turf/T = get_turf(target) - if(T.z in using_map.station_levels) + if((T.z in using_map.station_levels) || (T.z in using_map.admin_levels)) target.visible_message("\The [src] lets out a loud beep as safeties trigger, before imploding and falling apart.") target.cut_overlay(image_overlay, TRUE) qdel(src) diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm index 325e9f518a..148df8db50 100644 --- a/code/game/objects/items/weapons/id cards/station_ids.dm +++ b/code/game/objects/items/weapons/id cards/station_ids.dm @@ -90,8 +90,8 @@ return data /obj/item/weapon/card/id/attack_self(mob/user as mob) - user.visible_message("\The [user] shows you: [bicon(src)] [src.name]. The assignment on the card: [src.assignment]",\ - "You flash your ID card: [bicon(src)] [src.name]. The assignment on the card: [src.assignment]") + user.visible_message("\The [user] shows you: \icon[src][bicon(src)] [src.name]. The assignment on the card: [src.assignment]",\ + "You flash your ID card: \icon[src][bicon(src)] [src.name]. The assignment on the card: [src.assignment]") src.add_fingerprint(user) return @@ -107,7 +107,7 @@ set category = "Object" set src in usr - to_chat(usr, "[bicon(src)] [src.name]: The current assignment on the card is [src.assignment].") + to_chat(usr, "\icon[src][bicon(src)] [src.name]: The current assignment on the card is [src.assignment].") to_chat(usr, "The blood type on the card is [blood_type].") to_chat(usr, "The DNA hash on the card is [dna_hash].") to_chat(usr, "The fingerprint hash on the card is [fingerprint_hash].") @@ -167,7 +167,7 @@ assignment = "Synthetic" access = list( access_synth, access_mining, access_mining_station, access_mining_office, access_research, - access_xenoarch, access_xenobiology, access_external_airlocks, access_robotics, access_tox, + access_xenoarch, access_xenobiology, access_external_airlocks, access_robotics, access_tox, access_tox_storage, access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot ) diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm index 127f300ab7..362a5e0be6 100644 --- a/code/game/objects/items/weapons/implants/implant_vr.dm +++ b/code/game/objects/items/weapons/implants/implant_vr.dm @@ -22,20 +22,17 @@ if (emote == "smile") src.uses-- to_chat(source,"You suddenly feel as if you can understand other languages!") - source.add_language(LANGUAGE_CHIMPANZEE) - source.add_language(LANGUAGE_NEAERA) - source.add_language(LANGUAGE_STOK) - source.add_language(LANGUAGE_FARWA) source.add_language(LANGUAGE_UNATHI) source.add_language(LANGUAGE_SIIK) source.add_language(LANGUAGE_SKRELLIAN) + source.add_language(LANGUAGE_ANIMAL) source.add_language(LANGUAGE_SCHECHI) source.add_language(LANGUAGE_BIRDSONG) source.add_language(LANGUAGE_SAGARU) source.add_language(LANGUAGE_CANILUNZT) - source.add_language(LANGUAGE_SLAVIC) + source.add_language(LANGUAGE_SLAVIC) //CHOMP reAdd source.add_language(LANGUAGE_SOL_COMMON) //In case they're giving a xenomorph an implant or something. - source.add_language(LANGUAGE_TAVAN) + source.add_language(LANGUAGE_TAVAN) /obj/item/weapon/implant/vrlanguage/post_implant(mob/source) source.mind.store_memory("A implant can be activated by using the smile emote, say *smile to attempt to activate.", 0, 0) diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 606b707fce..952e5fa976 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -15,18 +15,22 @@ to_chat(user, "You [active ? "" : "de"]activate \the [src].") update() -/obj/item/weapon/implanter/verb/remove_implant(var/mob/user) +/obj/item/weapon/implanter/verb/remove_implant() set category = "Object" set name = "Remove Implant" set src in usr if(!imp) return - imp.loc = get_turf(src) - user.put_in_hands(imp) - to_chat(user, "You remove \the [imp] from \the [src].") - name = "implanter" - imp = null + if(istype(usr, /mob)) + var/mob/M = usr + imp.loc = get_turf(src) + if(M.get_active_hand() == null) + M.put_in_hands(imp) + to_chat(M, "You remove \the [imp] from \the [src].") + name = "implanter" + imp = null + update() return diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index a450fa3b8d..679e342ad2 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -638,6 +638,23 @@ "} +/obj/item/weapon/book/manual/robotics_manual + name = "Guide to Robotics" + icon_state ="evabook" + item_state = "book3" + author = "Simple Robotics" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned + title = "Guide to Robotics" + +/obj/item/weapon/book/manual/robotics_manual/New() + ..() + dat = {" + + + + + + + "} /obj/item/weapon/book/manual/robotics_cyborgs name = "Cyborgs for Dummies" diff --git a/code/game/objects/items/weapons/material/chainsaw.dm b/code/game/objects/items/weapons/material/chainsaw.dm index ddc202e6a1..f64b41d7f0 100644 --- a/code/game/objects/items/weapons/material/chainsaw.dm +++ b/code/game/objects/items/weapons/material/chainsaw.dm @@ -12,12 +12,13 @@ var/active_force = 55 var/inactive_force = 10 -/obj/item/weapon/chainsaw/New() +/obj/item/weapon/chainsaw/Initialize() var/datum/reagents/R = new/datum/reagents(max_fuel) reagents = R R.my_atom = src R.add_reagent("fuel", max_fuel) START_PROCESSING(SSobj, src) + . = ..() /obj/item/weapon/chainsaw/Destroy() STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 6fddd15013..5930c1ad7e 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -57,7 +57,7 @@ // Randomizes color /obj/item/weapon/melee/umbrella/random/New() - color = "#"+get_random_colour() + color = get_random_colour() ..() /obj/item/weapon/melee/cursedblade @@ -95,4 +95,4 @@ new_voice.name = "cursed sword" //Cursed swords shouldn't be known characters. new_voice.real_name = "cursed sword" voice_mobs.Add(new_voice) - listening_objects |= src \ No newline at end of file + listening_objects |= src diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 58ea2ad9d5..3afc5d64a5 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -32,7 +32,10 @@ for(var/obj/item/i in contents) var/i_state = i.item_state if(!i_state) i_state = i.icon_state - standing.add_overlay(image(icon = INV_BELT_DEF_ICON, icon_state = i_state)) + var/image/add_icon = image(icon = INV_BELT_DEF_ICON, icon_state = i_state) + if(istype(clip_mask)) //For taur bodies/tails clipping off parts of uniforms and suits. + standing.filters += filter(type = "alpha", icon = clip_mask) + standing.add_overlay(add_icon) return standing /obj/item/weapon/storage/update_icon() diff --git a/code/game/objects/items/weapons/storage/belt_vr.dm b/code/game/objects/items/weapons/storage/belt_vr.dm index 91cf6e1cd4..58285af552 100644 --- a/code/game/objects/items/weapons/storage/belt_vr.dm +++ b/code/game/objects/items/weapons/storage/belt_vr.dm @@ -50,7 +50,8 @@ /obj/item/device/radio, /obj/item/device/mapping_unit, /obj/item/device/binoculars, //CHOMPADD - /obj/item/weapon/kinetic_crusher + /obj/item/weapon/kinetic_crusher, + /obj/item/device/analyzer ) /obj/item/weapon/storage/belt/explorer/pathfinder @@ -72,17 +73,34 @@ max_w_class = ITEMSIZE_LARGE max_storage_space = ITEMSIZE_COST_NORMAL * 6 can_hold = list( - /obj/item/weapon/storage/box/samplebags, + /obj/item/fulton_core, + /obj/item/extraction_pack, + /obj/item/resonator, + /obj/item/stack/marker_beacon, + /obj/item/stack/flag, + /obj/item/modular_computer/tablet, + /obj/item/clothing/glasses, + /obj/item/clothing/shoes/bhop, + /obj/item/device/multitool, /obj/item/device/core_sampler, /obj/item/device/beacon_locator, - /obj/item/device/radio/beacon, + /obj/item/device/radio, /obj/item/device/measuring_tape, /obj/item/device/flashlight, + /obj/item/device/depth_scanner, + /obj/item/device/camera, + /obj/item/device/ano_scanner, + /obj/item/device/xenoarch_multi_tool, + /obj/item/device/geiger, + /obj/item/device/gps, + /obj/item/device/laser_pointer, + /obj/item/device/survivalcapsule, + /obj/item/device/perfect_tele/one_beacon, + /obj/item/device/binoculars, + /obj/item/weapon/storage/box/samplebags, /obj/item/weapon/cell/device, /obj/item/weapon/pickaxe, /obj/item/weapon/shovel, - /obj/item/device/depth_scanner, - /obj/item/device/camera, /obj/item/weapon/paper, /obj/item/weapon/photo, /obj/item/weapon/folder, @@ -90,17 +108,48 @@ /obj/item/weapon/folder, /obj/item/weapon/clipboard, /obj/item/weapon/anodevice, - /obj/item/clothing/glasses, /obj/item/weapon/tool/wrench, + /obj/item/weapon/tool/screwdriver, /obj/item/weapon/storage/excavation, /obj/item/weapon/anobattery, - /obj/item/device/ano_scanner, - /obj/item/weapon/pickaxe/hand, - /obj/item/device/xenoarch_multi_tool, - /obj/item/weapon/pickaxe/excavationdrill, - /obj/item/device/geiger, - /obj/item/device/gps, - /obj/item/stack/marker_beacon, - /obj/item/stack/flag, - /obj/item/weapon/melee + /obj/item/weapon/reagent_containers/hypospray/autoinjector, + /obj/item/weapon/plastique/seismic/locked, + /obj/item/weapon/gun/magnetic/matfed/phoronbore, + /obj/item/weapon/storage/bag/sheetsnatcher, + /obj/item/weapon/melee, + /obj/item/weapon/kinetic_crusher, + /obj/item/weapon/mining_scanner + ) + //Pretty much, if it's in the mining vendor, they should be able to put it on the belt. + +/obj/item/weapon/storage/belt/archaeology + can_hold = list( + /obj/item/stack/marker_beacon, + /obj/item/clothing/glasses, + /obj/item/weapon/storage/box/samplebags, + /obj/item/device/xenoarch_multi_tool, + /obj/item/device/core_sampler, + /obj/item/device/beacon_locator, + /obj/item/device/radio/beacon, + /obj/item/device/gps, + /obj/item/device/measuring_tape, + /obj/item/device/flashlight, + /obj/item/device/depth_scanner, + /obj/item/device/camera, + /obj/item/device/ano_scanner, + /obj/item/device/geiger, + /obj/item/weapon/cell/device, + /obj/item/weapon/pickaxe, + /obj/item/weapon/paper, + /obj/item/weapon/photo, + /obj/item/weapon/folder, + /obj/item/weapon/pen, + /obj/item/weapon/folder, + /obj/item/weapon/clipboard, + /obj/item/weapon/anodevice, + /obj/item/weapon/tool/wrench, + /obj/item/device/multitool, + /obj/item/weapon/storage/excavation, + /obj/item/weapon/anobattery, + /obj/item/weapon/pickaxe ) diff --git a/code/game/objects/items/weapons/storage/pouches.dm b/code/game/objects/items/weapons/storage/pouches.dm index 8cd065aec1..f2a1892fa3 100644 --- a/code/game/objects/items/weapons/storage/pouches.dm +++ b/code/game/objects/items/weapons/storage/pouches.dm @@ -61,7 +61,7 @@ desc = "This storage pouch can be used to provide some additional storage for quick access. Can only hold ammunition, cells, explosives, and grenades." icon_state = "ammo" max_storage_space = INVENTORY_POUCH_SPACE - can_hold = list(/obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/cell/device/weapon, /obj/item/weapon/grenade, /obj/item/weapon/plastique) //Vorestation Add - make it more useful for non-sec/explo + can_hold = list(/obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/cell/device, /obj/item/weapon/grenade, /obj/item/weapon/plastique) //Vorestation Add - make it more useful for non-sec/explo //Chompstation Edit - Adds more variety of device cells it can store /obj/item/weapon/storage/pouch/eng_tool name = "storage pouch (tools)" @@ -93,9 +93,9 @@ /obj/item/weapon/extinguisher/mini, /obj/item/weapon/tape_roll, /obj/item/device/integrated_electronics/wirer, - /obj/item/device/integrated_electronics/debugger, - /obj/item/weapon/shovel/spade, - /obj/item/stack/nanopaste, + /obj/item/device/integrated_electronics/debugger, + /obj/item/weapon/shovel/spade, + /obj/item/stack/nanopaste, /obj/item/device/geiger ) //Vorestation Add - make it the same as the tool-belt why was it not like this to start with wtf @@ -154,7 +154,7 @@ /obj/item/stack/nanopaste, /obj/item/taperoll/medical, /obj/item/weapon/storage/box/freezer, - /obj/item/clothing/mask/chewable/candy/lolli, + /obj/item/clothing/mask/chewable/candy/lolli, ) //Vorestation add - added a bunch of misc medical stuff max_storage_space = ITEMSIZE_COST_SMALL*3 //Vorestation Add - makes it slightly smaller since its a lot of stuff with pocket access remove_delay = 5 //Vorestation Add - .5 second delay, get the medical things faster because there is no reason to use this otherwise. still gotta stop moving to take things out. @@ -216,4 +216,4 @@ icon_state = "holdingpouch" max_storage_space = INVENTORY_STANDARD_SPACE // Size of a normal backpack, compared to a normal BoH, which is way bigger -#undef INVENTORY_POUCH_SPACE \ No newline at end of file +#undef INVENTORY_POUCH_SPACE diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 36093fa2cf..2fa1e33c03 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -80,16 +80,27 @@ return ..() +/obj/item/weapon/storage/secure/AltClick(mob/user as mob) + if (isliving(user) && Adjacent(user) && (src.locked == 1)) + to_chat(user, "[src] is locked and cannot be opened!") + else if (isliving(user) && Adjacent(user) && (!src.locked)) + src.open(usr) + else + for(var/mob/M in range(1)) + if (M.s_active == src) + src.close(M) + src.add_fingerprint(user) + return /obj/item/weapon/storage/secure/attack_self(mob/user as mob) tgui_interact(user) /obj/item/weapon/storage/secure/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "SecureSafe", name) ui.open() - + /obj/item/weapon/storage/secure/tgui_data(mob/user) var/list/data = list() data["locked"] = locked diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index d4279b3890..12b2b5b2fb 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -882,8 +882,8 @@ if(target != user) return // If the user didn't drag themselves, exit if(user.incapacitated() || user.buckled) return // If user is incapacitated or buckled, exit if(get_holder_of_type(src, /mob/living/carbon/human) == user) return // No jumping into your own equipment - if(ishuman(user) && user.get_effective_size() > 0.25) return // Only micro characters - if(ismouse(user) && user.get_effective_size() > 1) return // Only normal sized mice or less + if(ishuman(user) && user.get_effective_size(TRUE) > 0.25) return // Only micro characters + if(ismouse(user) && user.get_effective_size(TRUE) > 1) return // Only normal sized mice or less // Create a dummy holder with user's size to test insertion var/obj/item/weapon/holder/D = new/obj/item/weapon/holder diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 4161ae740b..13e744e141 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -107,7 +107,7 @@ /obj/item/weapon/storage/wallet/poly/New() ..() verbs |= /obj/item/weapon/storage/wallet/poly/proc/change_color - color = "#"+get_random_colour() + color = get_random_colour() update_icon() /obj/item/weapon/storage/wallet/poly/proc/change_color() diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index c852fefe9f..48ced948be 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -244,6 +244,9 @@ /obj/item/weapon/surgical/bonesetter/cyborg toolspeed = 0.5 +/obj/item/weapon/surgical/bioregen/cyborg //VoreStation edit: let the borgs S U C C + toolspeed = 0.5 + // Alien Tools /obj/item/weapon/surgical/retractor/alien diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm index 98c246a03a..0f70a805dd 100644 --- a/code/game/objects/items/weapons/syndie.dm +++ b/code/game/objects/items/weapons/syndie.dm @@ -50,7 +50,7 @@ icon_state = "c-4[size]_1" playsound(src, 'sound/weapons/armbomb.ogg', 75, 1) for(var/mob/O in hearers(src, null)) - O.show_message("[bicon(src)] The [src.name] beeps! ") + O.show_message("\icon[src][bicon(src)] The [src.name] beeps! ") sleep(50) explosion(get_turf(src), devastate, heavy_impact, light_impact, flash_range) for(var/dirn in cardinal) //This is to guarantee that C4 at least breaks down all immediately adjacent walls and doors. diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 0c6c78dbbe..7fbc4ff547 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -455,7 +455,7 @@ var/list/global/tank_gauge_cache = list() return T.assume_air(air_contents) playsound(src, 'sound/weapons/Gunshot_shotgun.ogg', 20, 1) - visible_message("[bicon(src)] \The [src] flies apart!", "You hear a bang!") + visible_message("\icon[src][bicon(src)] \The [src] flies apart!", "You hear a bang!") T.hotspot_expose(air_contents.temperature, 70, 1) @@ -500,7 +500,7 @@ var/list/global/tank_gauge_cache = list() T.assume_air(leaked_gas) if(!leaking) - visible_message("[bicon(src)] \The [src] relief valve flips open with a hiss!", "You hear hissing.") + visible_message("\icon[src][bicon(src)] \The [src] relief valve flips open with a hiss!", "You hear hissing.") playsound(src, 'sound/effects/spray.ogg', 10, 1, -3) leaking = 1 #ifdef FIREDBG diff --git a/code/game/objects/items/weapons/tools/brass.dm b/code/game/objects/items/weapons/tools/brass.dm index eedebe3220..5c9ab92c06 100644 --- a/code/game/objects/items/weapons/tools/brass.dm +++ b/code/game/objects/items/weapons/tools/brass.dm @@ -11,11 +11,13 @@ /obj/item/weapon/tool/wirecutters/brass icon_state = "cutters_brass" item_state = "cutters_yellow" + random_color = FALSE // CHOMPFix, no more not-brass brass tools. //Screwdriver /obj/item/weapon/tool/screwdriver/brass icon_state = "screwdriver_brass" item_state = "screwdriver_black" + random_color = FALSE // CHOMPFix, no more not-brass brass tools. //Wrench /obj/item/weapon/tool/wrench/brass diff --git a/code/game/objects/items/weapons/tools/combitool.dm b/code/game/objects/items/weapons/tools/combitool.dm index 573ff96128..2f2ddbf4a5 100644 --- a/code/game/objects/items/weapons/tools/combitool.dm +++ b/code/game/objects/items/weapons/tools/combitool.dm @@ -29,7 +29,7 @@ if(loc == user && tools.len) . += "It has the following fittings:" for(var/obj/item/tool in tools) - . += "[bicon(tool)] - [tool.name][tools[current_tool]==tool?" (selected)":""]") + . += "\icon[tool][bicon(tool)] - [tool.name][tools[current_tool]==tool?" (selected)":""]") /obj/item/weapon/combitool/New() ..() diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm index 119c9d7419..df027debd4 100644 --- a/code/game/objects/items/weapons/towels.dm +++ b/code/game/objects/items/weapons/towels.dm @@ -31,4 +31,4 @@ /obj/item/weapon/towel/random/New() ..() - color = "#"+get_random_colour() \ No newline at end of file + color = get_random_colour() diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 02c25c736d..26f3200242 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -19,7 +19,7 @@ user.setClickCooldown(user.get_attack_speed(src)) user.do_attack_animation(M) - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return diff --git a/code/game/objects/items_vr.dm b/code/game/objects/items_vr.dm new file mode 100644 index 0000000000..4b8dbcaae5 --- /dev/null +++ b/code/game/objects/items_vr.dm @@ -0,0 +1,27 @@ +/obj/item + var/list/possessed_voice //Allows for items to be possessed/inhabited by voices. + var/list/warned_of_possession //Checks to see who has been informed this item is possessed. + + +/obj/item/proc/inhabit_item(var/mob/candidate, var/candidate_name, var/mob/living/candidate_original_form) + //This makes it so that any object in the game can have something put in it like the cursed sword! + //This means the proc can also be manually called by admin commands. + //Handle moving the person into the object. + if(!possessed_voice) //Create the list for possessed_voice if it doesn't already have one. + possessed_voice = list() + if(!warned_of_possession) //Creates a list of warned users. + warned_of_possession = list() + var/mob/living/voice/new_voice = new /mob/living/voice(src) //Make the voice mob the person is going to be. + new_voice.transfer_identity(candidate) //Now make the voice mob load from the ghost's active character in preferences. + new_voice.mind = candidate.mind //Transfer the mind, if any. + new_voice.ckey = candidate.ckey //Finally, bring the client over. + new_voice.tf_mob_holder = candidate_original_form //Save what mob they are! We'll need this for OOC escape and transformation back to their normal form. + if(candidate_name) //Were we given a candidate_name? Great! Name them that. + new_voice.name = "[candidate_name]" + else + new_voice.name = "[name]" //No name given? Give them the name of the object they're inhabiting. + new_voice.real_name = "[new_voice.real_name]" //We still know their real name though! + possessed_voice.Add(new_voice) + listening_objects |= src + new_voice.verbs -= /mob/living/voice/verb/change_name //No changing your name! Bad! + new_voice.verbs -= /mob/living/voice/verb/hang_up //Also you can't hang up. You are the item! \ No newline at end of file diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index ac7fe2b209..b9e462190a 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -41,7 +41,7 @@ /obj/CanUseTopic(var/mob/user, var/datum/tgui_state/state = GLOB.tgui_default_state) if(user.CanUseObjTopic(src)) return ..() - to_chat(user, "[bicon(src)]Access Denied!") + to_chat(user, "\icon[src][bicon(src)]Access Denied!") return STATUS_CLOSE /mob/living/silicon/CanUseObjTopic(var/obj/O) diff --git a/code/game/objects/random/misc_vr.dm b/code/game/objects/random/misc_vr.dm index 21ca60771a..3f2644348d 100644 --- a/code/game/objects/random/misc_vr.dm +++ b/code/game/objects/random/misc_vr.dm @@ -114,6 +114,7 @@ prob(30);/obj/item/weapon/aliencoin/gold, prob(20);/obj/item/weapon/aliencoin/phoron, prob(5);/obj/item/capture_crystal, + prob(5);/obj/random/mouseray, prob(5);/obj/item/device/perfect_tele, prob(5);/obj/item/weapon/bluespace_harpoon, prob(1);/obj/item/device/paicard, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 593d6db338..054b9086c5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -55,6 +55,12 @@ /obj/item/weapon/module/power_control = 3, /obj/item/device/multitool = 3) +/obj/structure/closet/secure_closet/engineering_electrical/double + starts_with = list( + /obj/item/clothing/gloves/yellow = 4, + /obj/item/weapon/storage/toolbox/electrical = 6, + /obj/item/weapon/module/power_control = 6, + /obj/item/device/multitool = 6) /obj/structure/closet/secure_closet/engineering_welding name = "welding supplies" @@ -67,6 +73,13 @@ /obj/item/weapon/weldpack = 3, /obj/item/clothing/glasses/welding = 3) +/obj/structure/closet/secure_closet/engineering_welding/double + starts_with = list( + /obj/item/clothing/head/welding = 6, + /obj/item/weapon/weldingtool/largetank = 6, + /obj/item/weapon/weldpack = 6, + /obj/item/clothing/glasses/welding = 6) + /obj/structure/closet/secure_closet/engineering_personal name = "engineer's locker" req_access = list(access_engine_equip) @@ -120,7 +133,7 @@ /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos, /obj/item/clothing/shoes/boots/winter/atmos, /obj/item/weapon/tank/emergency/oxygen/engi, - /obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already? + /obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already? /obj/structure/closet/secure_closet/atmos_personal/Initialize() if(prob(50)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm index 1372d70623..330431b781 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm @@ -192,9 +192,9 @@ /obj/item/weapon/storage/lockbox/medal, /obj/item/device/radio/headset/heads/captain, /obj/item/device/radio/headset/heads/captain/alt, - /obj/item/weapon/gun/energy/gun, + /obj/item/gunbox/captain, /obj/item/weapon/melee/telebaton, /obj/item/device/flash, /obj/item/weapon/storage/box/ids, /obj/item/weapon/melee/rapier, - /obj/item/clothing/accessory/holster/machete/rapier) \ No newline at end of file + /obj/item/clothing/accessory/holster/machete/rapier) diff --git a/code/game/objects/structures/flora/flora.dm b/code/game/objects/structures/flora/flora.dm index 1f7e2d0ba9..2b03156385 100644 --- a/code/game/objects/structures/flora/flora.dm +++ b/code/game/objects/structures/flora/flora.dm @@ -81,7 +81,7 @@ /obj/structure/flora/proc/spawn_harvest(var/path = null, var/mob/user = null) if(!ispath(path)) return 0 - + var/atom/movable/AM = new path() if(user) user.put_in_hands(AM) @@ -96,7 +96,7 @@ name = "bush" icon = 'icons/obj/flora/snowflora.dmi' icon_state = "snowbush1" - + destroy_on_harvest = TRUE harvest_tool = /obj/item/weapon/material/knife randomize_harvest_count = FALSE @@ -121,13 +121,13 @@ name = "bush" icon = 'icons/obj/flora/ausflora.dmi' icon_state = "firstbush_1" - + destroy_on_harvest = TRUE harvest_tool = /obj/item/weapon/material/knife randomize_harvest_count = TRUE harvest_loot = list(/obj/item/stack/material/fiber = 1) min_harvests = 1 - max_harvests = 3 + max_harvests = 3 /obj/structure/flora/ausbushes/spawn_harvest(var/path = null, var/mob/user = null) . = ..() @@ -300,7 +300,7 @@ user.drop_from_inventory(I, src) I.forceMove(src) stored_item = I - src.visible_message("[bicon(src)] [bicon(I)] [user] places [I] into [src].") + src.visible_message("\icon[src][bicon(src)] \icon[I][bicon(I)] [user] places [I] into [src].") return else to_chat(user, "You refrain from putting things into the plant pot.") @@ -311,7 +311,7 @@ to_chat(user, "You see nothing of interest in [src]...") else if(do_after(user, 10)) - to_chat(user, "You find [bicon(stored_item)] [stored_item] in [src]!") + to_chat(user, "You find \icon[stored_item][bicon(stored_item)] [stored_item] in [src]!") stored_item.forceMove(get_turf(src)) stored_item = null ..() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 46a888e55f..1aeb9cdf4c 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -118,9 +118,9 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) . = ..(user) if(istype(mybucket)) var/contains = mybucket.reagents.total_volume - . += "[bicon(src)] The bucket contains [contains] unit\s of liquid!" + . += "\icon[src][bicon(src)] The bucket contains [contains] unit\s of liquid!" else - . += "[bicon(src)] There is no bucket mounted on it!" + . += "\icon[src][bicon(src)] There is no bucket mounted on it!" /obj/structure/janitorialcart/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob) if (istype(O, /obj/structure/mopbucket) && !mybucket) diff --git a/code/game/objects/structures/map_blocker_vr.dm b/code/game/objects/structures/map_blocker_vr.dm index bd56b08d6e..2b41679979 100644 --- a/code/game/objects/structures/map_blocker_vr.dm +++ b/code/game/objects/structures/map_blocker_vr.dm @@ -8,8 +8,11 @@ opacity = 0 density = TRUE unacidable = TRUE + plane = PLANE_BUILDMODE +/* //VOREStation Edit /obj/effect/blocker/Initialize() // For non-gateway maps. . = ..() icon = null icon_state = null +*/ diff --git a/code/game/objects/structures/signs_vr.dm b/code/game/objects/structures/signs_vr.dm index 321ba27fc7..d786560142 100644 --- a/code/game/objects/structures/signs_vr.dm +++ b/code/game/objects/structures/signs_vr.dm @@ -2,4 +2,10 @@ icon = 'icons/obj/decals_vr.dmi' name = "\improper ITG" desc = "A polished metal sign which reads 'Ironcrest Transport Group'." - icon_state = "itg" \ No newline at end of file + icon_state = "itg" + +/obj/structure/sign/scenery/fakefireaxe + name = "decorative fire axe cabinet" + desc = "A fancy decorative indent in the wall, with an axe inside. The axe is actually a part of the indent and cannot be removed. A nostalgic reminder of older times of firefighting." + icon_state = "fireaxe1000" + icon = 'icons/obj/closet.dmi' \ No newline at end of file diff --git a/code/game/objects/structures/trash_pile_vr.dm b/code/game/objects/structures/trash_pile_vr.dm index 4de01de0b4..3dacfe6455 100644 --- a/code/game/objects/structures/trash_pile_vr.dm +++ b/code/game/objects/structures/trash_pile_vr.dm @@ -25,7 +25,8 @@ /obj/item/weapon/gun/projectile/pirate, /obj/item/clothing/accessory/permit/gun, /obj/item/weapon/gun/projectile/dartgun, - /obj/item/clothing/gloves/black/bloodletter + /obj/item/clothing/gloves/black/bloodletter, + /obj/item/weapon/gun/energy/mouseray/metamorphosis ) var/global/list/allocated_gamma = list() @@ -83,6 +84,49 @@ else return ..() +/obj/structure/trash_pile/attack_ghost(mob/observer/user as mob) + if(config.disable_player_mice) + to_chat(user, "Spawning as a mouse is currently disabled.") + return + + //VOREStation Add Start + if(jobban_isbanned(user, "GhostRoles")) + to_chat(user, "You cannot become a mouse because you are banned from playing ghost roles.") + return + //VOREStation Add End + + if(!user.MayRespawn(1)) + return + + var/turf/T = get_turf(src) + if(!T || (T.z in using_map.admin_levels)) + to_chat(user, "You may not spawn as a mouse on this Z-level.") + return + + var/timedifference = world.time - user.client.time_died_as_mouse + if(user.client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600) + var/timedifference_text + timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss") + to_chat(user, "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.") + return + + var/response = tgui_alert(user, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?",list("Squeek!","Nope!")) + if(response != "Squeek!") return //Hit the wrong key...again. + + var/mob/living/simple_mob/animal/passive/mouse/host + host = new /mob/living/simple_mob/animal/passive/mouse(get_turf(src)) + + if(host) + if(config.uneducated_mice) + host.universal_understand = 0 + announce_ghost_joinleave(src, 0, "They are now a mouse.") + host.ckey = user.ckey + to_chat(host, "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.") + + var/atom/A = get_holder_at_turf_level(src) + A.visible_message("[host] crawls out of \the [src].") + return + /obj/structure/trash_pile/attack_hand(mob/user) //Human mob if(ishuman(user)) @@ -207,6 +251,8 @@ prob(2);/obj/item/toy/tennis/cyan, prob(2);/obj/item/toy/tennis/blue, prob(2);/obj/item/toy/tennis/purple, + prob(1);/obj/item/weapon/storage/box/brainzsnax, + prob(1);/obj/item/weapon/storage/box/brainzsnax/red, prob(1);/obj/item/clothing/glasses/sunglasses, prob(1);/obj/item/clothing/glasses/sunglasses/bigshot, prob(1);/obj/item/clothing/glasses/welding, @@ -269,7 +315,8 @@ prob(1);/obj/item/weapon/storage/secure/briefcase/trashmoney, prob(1);/obj/item/device/survivalcapsule/popcabin, prob(1);/obj/item/weapon/reagent_containers/syringe/steroid, - prob(1);/obj/item/capture_crystal) + prob(1);/obj/item/capture_crystal, + prob(1);/obj/item/weapon/gun/energy/mouseray) var/obj/item/I = new path() return I diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index a8eb677840..a5812cc91d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -255,13 +255,7 @@ M.clean_blood() - if(isturf(loc)) - var/turf/tile = loc - for(var/obj/effect/E in tile) - if(istype(E,/obj/effect/rune) || istype(E,/obj/effect/decal/cleanable) || istype(E,/obj/effect/overlay)) - qdel(E) - - reagents.splash(O, 10) + reagents.splash(O, 10, min_spill = 0, max_spill = 0) /obj/machinery/shower/process() if(!on) return @@ -275,11 +269,10 @@ reagents.add_reagent("water", reagents.get_free_space()) /obj/machinery/shower/proc/wash_floor() - if(!ismist && is_washing) + if(is_washing) return is_washing = 1 var/turf/T = get_turf(src) - reagents.splash(T, reagents.total_volume) T.clean(src) spawn(100) is_washing = 0 diff --git a/code/game/sound.dm b/code/game/sound.dm index 4c2cc64c88..bfc01ad2cc 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -291,3 +291,18 @@ var/list/keyboard_sound = list ('sound/effects/keyboard/keyboard1.ogg','sound/effects/keyboard/keyboard2.ogg','sound/effects/keyboard/keyboard3.ogg', 'sound/effects/keyboard/keyboard4.ogg') var/list/bodyfall_sound = list('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg') var/list/teppi_sound = list('sound/voice/teppi/gyooh1.ogg', 'sound/voice/teppi/gyooh2.ogg', 'sound/voice/teppi/gyooh3.ogg', 'sound/voice/teppi/gyooh4.ogg', 'sound/voice/teppi/gyooh5.ogg', 'sound/voice/teppi/gyooh6.ogg', 'sound/voice/teppi/snoot1.ogg', 'sound/voice/teppi/snoot2.ogg') +var/list/talk_sound = list('sound/talksounds/a.ogg','sound/talksounds/b.ogg','sound/talksounds/c.ogg','sound/talksounds/d.ogg','sound/talksounds/e.ogg','sound/talksounds/f.ogg','sound/talksounds/g.ogg','sound/talksounds/h.ogg') +var/list/emote_sound = list('sound/talksounds/me_a.ogg','sound/talksounds/me_b.ogg','sound/talksounds/me_c.ogg','sound/talksounds/me_d.ogg','sound/talksounds/me_e.ogg','sound/talksounds/me_f.ogg') +var/list/goon_speak_one_sound = list('sound/talksounds/goon/speak_1.ogg', 'sound/talksounds/goon/speak_1_ask.ogg', 'sound/talksounds/goon/speak_1_exclaim.ogg') +var/list/goon_speak_two_sound = list('sound/talksounds/goon/speak_2.ogg', 'sound/talksounds/goon/speak_2_ask.ogg', 'sound/talksounds/goon/speak_2_exclaim.ogg') +var/list/goon_speak_three_sound = list('sound/talksounds/goon/speak_3.ogg', 'sound/talksounds/goon/speak_3_ask.ogg', 'sound/talksounds/goon/speak_3_exclaim.ogg') +var/list/goon_speak_four_sound = list('sound/talksounds/goon/speak_4.ogg', 'sound/talksounds/goon/speak_4_ask.ogg', 'sound/talksounds/goon/speak_4_exclaim.ogg') +var/list/goon_speak_blub_sound = list('sound/talksounds/goon/blub.ogg', 'sound/talksounds/goon/blub_ask.ogg', 'sound/talksounds/goon/blub_exclaim.ogg') +var/list/goon_speak_bottalk_sound = list('sound/talksounds/goon/bottalk_1.ogg', 'sound/talksounds/goon/bottalk_2.ogg', 'sound/talksounds/goon/bottalk_3.ogg', 'sound/talksounds/goon/bottalk_4.wav') +var/list/goon_speak_buwoo_sound = list('sound/talksounds/goon/buwoo.ogg', 'sound/talksounds/goon/buwoo_ask.ogg', 'sound/talksounds/goon/buwoo_exclaim.ogg') +var/list/goon_speak_cow_sound = list('sound/talksounds/goon/cow.ogg', 'sound/talksounds/goon/cow_ask.ogg', 'sound/talksounds/goon/cow_exclaim.ogg') +var/list/goon_speak_lizard_sound = list('sound/talksounds/goon/lizard.ogg', 'sound/talksounds/goon/lizard_ask.ogg', 'sound/talksounds/goon/lizard_exclaim.ogg') +var/list/goon_speak_pug_sound = list('sound/talksounds/goon/pug.ogg', 'sound/talksounds/goon/pug_ask.ogg', 'sound/talksounds/goon/pug_exclaim.ogg') +var/list/goon_speak_pugg_sound = list('sound/talksounds/goon/pugg.ogg', 'sound/talksounds/goon/pugg_ask.ogg', 'sound/talksounds/goon/pugg_exclaim.ogg') +var/list/goon_speak_roach_sound = list('sound/talksounds/goon/roach.ogg', 'sound/talksounds/goon/roach_ask.ogg', 'sound/talksounds/goon/roach_exclaim.ogg') +var/list/goon_speak_skelly_sound = list('sound/talksounds/goon/skelly.ogg', 'sound/talksounds/goon/skelly_ask.ogg', 'sound/talksounds/goon/skelly_exclaim.ogg') diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index f6087a26c8..4b9686a25e 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -332,6 +332,26 @@ var/list/flooring_types icon_base = "tealcarpet" build_type = /obj/item/stack/tile/carpet/teal +/decl/flooring/carpet/browncarpet + name = "brown carpet" + icon_base = "brncarpet" + build_type = /obj/item/stack/tile/carpet/brncarpet + +/decl/flooring/carpet/blucarpet2 + name = "blue carpet" + icon_base = "blue1" + build_type = /obj/item/stack/tile/carpet/blucarpet2 + +/decl/flooring/carpet/greencarpet + name = "green carpet" + icon_base = "green" + build_type = /obj/item/stack/tile/carpet/greencarpet + +/decl/flooring/carpet/purplecarpet + name = "purple carpet" + icon_base = "purple" + build_type = /obj/item/stack/tile/carpet/purplecarpet + /decl/flooring/carpet/geo name = "geometric carpet" icon_base = "geocarpet" diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index fad0d29562..5793c761bc 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -60,6 +60,26 @@ icon_state = "oracarpet" initial_flooring = /decl/flooring/carpet/oracarpet +/turf/simulated/floor/carpet/brown + name = "brown carpet" + icon_state = "brncarpet" + initial_flooring = /decl/flooring/carpet/browncarpet + +/turf/simulated/floor/carpet/blue2 + name = "blue carpet" + icon_state = "blue1" + initial_flooring = /decl/flooring/carpet/blucarpet2 + +/turf/simulated/floor/carpet/green + name = "green carpet" + icon_state = "green" + initial_flooring = /decl/flooring/carpet/greencarpet + +/turf/simulated/floor/carpet/purple + name = "purple carpet" + icon_state = "purple" + initial_flooring = /decl/flooring/carpet/purplecarpet + /turf/simulated/floor/carpet/geo name = "geometric carpet" icon_state = "geocarpet" diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index aa96b141a1..52b2c30ab0 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -101,6 +101,11 @@ /turf/simulated/wall/sifwood/Initialize(mapload) . = ..(mapload, MAT_SIFWOOD) +// CHOMPEdit Start +/turf/simulated/wall/rsifwood/Initialize(mapload) + . = ..(mapload, MAT_SIFWOOD, MAT_SIFWOOD, MAT_SIFWOOD) +// CHOMPEdit End + /turf/simulated/wall/log/Initialize(mapload) . = ..(mapload, MAT_LOG) diff --git a/code/game/turfs/simulated/wall_types_vr.dm b/code/game/turfs/simulated/wall_types_vr.dm index b4bb8a5c04..6793cba759 100644 --- a/code/game/turfs/simulated/wall_types_vr.dm +++ b/code/game/turfs/simulated/wall_types_vr.dm @@ -187,6 +187,12 @@ var/list/flesh_overlay_cache = list() icon_state = "sifwood" icon = 'icons/turf/wall_masks_vr.dmi' +//CHOMPEdit Start +/turf/simulated/wall/rsifwood + icon_state = "sifwood" + icon = 'icons/turf/wall_masks_vr.dmi' +//CHOMPEdit End + /turf/simulated/wall/silver icon_state = "silver" icon = 'icons/turf/wall_masks_vr.dmi' diff --git a/code/global.dm b/code/global.dm index 9077df8d9c..f5da3edbab 100644 --- a/code/global.dm +++ b/code/global.dm @@ -143,7 +143,7 @@ var/list/robot_module_types = list( "Standard", "Engineering", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Clerical", "Security", "Research", "Medihound", "K9", "Janihound", "Sci-borg", "Pupdozer", - "Service-Hound", "BoozeHound", "KMine" + "Service-Hound", "BoozeHound", "KMine", "TraumaHound" , "UnityHound", "Honk-Hound" // CHOMPEdit -- Adds the UnityHound drone to the list. ) // List of modules added during code red diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index b311f2f5c8..ebbece968d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1,5 +1,3 @@ - -var/global/BSACooldown = 0 var/global/floorIsLava = 0 @@ -1567,8 +1565,8 @@ var/datum/announcement/minor/admin_min_announcer = new for(var/client/C in GLOB.admins) if((R_ADMIN | R_MOD | R_EVENT) & C.holder.rights) to_chat(C, "FAX LOG:[key_name_admin(src.owner)] has sent a fax message to [destination.department] (VIEW)") - - var/plaintext_title = P.sender ? "replied to [key_name(P.sender)]'s fax" : "sent a fax message to [destination.department]" + + var/plaintext_title = P.sender ? "replied to [key_name(P.sender)]'s fax" : "sent a fax message to [destination.department]" var/fax_text = paper_html_to_plaintext(P.info) log_game(plaintext_title) log_game(fax_text) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index c1d1973553..4e01100091 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -102,6 +102,8 @@ notes_add(banckey,banreason,usr) DB_ban_record(bantype, playermob, banduration, banreason, banjob, null, banckey, banip, bancid ) + if((bantype == BANTYPE_PERMA || bantype == BANTYPE_TEMP) && playermob.client) + qdel(playermob.client) else if(href_list["editrights"]) if(!check_rights(R_PERMISSIONS)) diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 28649fe3b5..f4715c8f1c 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -643,7 +643,7 @@ if(matches.len==1) result = matches[1] else - result = tgui_input_list(usr, "Select an atom type", "Spawn Atom", matches) + result = tgui_input_list(usr, "Select an atom type", "Spawn Atom", matches, strict_modern = TRUE) if(!objholder) result = default_path return result diff --git a/code/modules/admin/verbs/custom_event.dm b/code/modules/admin/verbs/custom_event.dm index a2550c6afe..de4032f966 100644 --- a/code/modules/admin/verbs/custom_event.dm +++ b/code/modules/admin/verbs/custom_event.dm @@ -7,7 +7,7 @@ to_chat(src, "Only administrators may use this command.") return - var/input = sanitize(tgui_input_text(usr, "Enter the description of the custom event. Be descriptive. To cancel the event, make this blank or hit cancel.", "Custom Event", custom_event_msg, MAX_PAPER_MESSAGE_LEN, TRUE), MAX_PAPER_MESSAGE_LEN, extra = 0) + var/input = sanitize(tgui_input_text(usr, "Enter the description of the custom event. Be descriptive. To cancel the event, make this blank or hit cancel.", "Custom Event", custom_event_msg, MAX_PAPER_MESSAGE_LEN, TRUE, prevent_enter = TRUE), MAX_PAPER_MESSAGE_LEN, extra = 0) if(!input || input == "") custom_event_msg = null log_admin("[usr.key] has cleared the custom event text.") diff --git a/code/modules/admin/verbs/lightning_strike.dm b/code/modules/admin/verbs/lightning_strike.dm index d00fb4a1af..6ebcca804d 100644 --- a/code/modules/admin/verbs/lightning_strike.dm +++ b/code/modules/admin/verbs/lightning_strike.dm @@ -17,7 +17,7 @@ (JMP)") #define LIGHTNING_REDIRECT_RANGE 28 // How far in tiles certain things draw lightning from. -#define LIGHTNING_ZAP_RANGE 3 // How far the tesla effect zaps, as well as the bad effects from a direct strike. +#define LIGHTNING_ZAP_RANGE 1 // How far the tesla effect zaps, as well as the bad effects from a direct strike. #define LIGHTNING_POWER 20000 // How much 'zap' is in a strike, used for tesla_zap(). // The real lightning proc. diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index f2f484ed7c..2427b2441d 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -17,7 +17,7 @@ return var/image/cross = image('icons/obj/storage.dmi',"bible") - msg = "[bicon(cross)] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src, src)]) (CA) (SC) (SMITE): [msg]" + msg = "\icon[cross][bicon(cross)] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src, src)]) (CA) (SC) (SMITE): [msg]" for(var/client/C in GLOB.admins) if(R_ADMIN|R_EVENT & C.holder.rights) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 56b3d2ba09..960d3a6b99 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -529,7 +529,7 @@ Traitors and the like can also be revived with the previous role mostly intact. //If desired, apply equipment. if(equipment) if(charjob) - job_master.EquipRank(new_character, charjob, 1) + job_master.EquipRank(new_character, charjob, 1, announce) new_character.mind.assigned_role = charjob new_character.mind.role_alt_title = job_master.GetPlayerAltTitle(new_character, charjob) equip_custom_items(new_character) //CHOMPEdit readded to enable custom_item.txt @@ -550,10 +550,10 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[admin] has spawned [player_key]'s character [new_character.real_name].") message_admins("[admin] has spawned [player_key]'s character [new_character.real_name].", 1) - + feedback_add_details("admin_verb","RSPCH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - + // Drop pods if(showy == "Polite") var/turf/T = get_turf(new_character) @@ -1078,7 +1078,7 @@ Traitors and the like can also be revived with the previous role mostly intact. set name = "Drop Pod Atom" set desc = "Spawn a new atom/movable in a drop pod where you are." set category = "Fun" - + if(!check_rights(R_SPAWN)) return @@ -1099,7 +1099,7 @@ Traitors and the like can also be revived with the previous role mostly intact. chosen = tgui_input_list(usr, "Select a movable type:", "Spawn in Drop Pod", matches) if(!chosen) return - + var/podtype = tgui_alert(src,"Destructive drop pods cause damage in a 3x3 and may break turfs. Polite drop pods lightly damage the turfs but won't break through.", "Drop Pod", list("Polite", "Destructive", "Cancel")) if(podtype == "Cancel") return @@ -1120,14 +1120,14 @@ Traitors and the like can also be revived with the previous role mostly intact. set name = "Drop Pod Deploy" set desc = "Drop an existing mob where you are in a drop pod." set category = "Fun" - + if(!check_rights(R_SPAWN)) return var/mob/living/L = tgui_input_list(usr, "Select the mob to drop:", "Mob Picker", living_mob_list) if(!L) return - + var/podtype = tgui_alert(src,"Destructive drop pods cause damage in a 3x3 and may break turfs. Polite drop pods lightly damage the turfs but won't break through.", "Drop Pod", list("Polite", "Destructive", "Cancel")) if(podtype == "Cancel") return diff --git a/code/modules/admin/verbs/smite.dm b/code/modules/admin/verbs/smite.dm index 78fd832f11..a407454d2b 100644 --- a/code/modules/admin/verbs/smite.dm +++ b/code/modules/admin/verbs/smite.dm @@ -25,21 +25,21 @@ broken_legs++ if(!broken_legs) to_chat(src,"[target] didn't have any breakable legs, sorry.") - + if(SMITE_BLUESPACEARTILLERY) bluespace_artillery(target,src) - + if(SMITE_SPONTANEOUSCOMBUSTION) target.adjust_fire_stacks(10) target.IgniteMob() target.visible_message("[target] bursts into flames!") - + if(SMITE_LIGHTNINGBOLT) var/turf/T = get_step(get_step(target, NORTH), NORTH) T.Beam(target, icon_state="lightning[rand(1,12)]", time = 5) target.electrocute_act(75,def_zone = BP_HEAD) target.visible_message("[target] is struck by lightning!") - + else return //Injection? Don't print any messages. @@ -50,14 +50,6 @@ if(!istype(target)) return - if(BSACooldown) - if(user) - to_chat(user,"BSA is still cooling down, please wait!") - return - - BSACooldown = 1 - VARSET_IN(global, BSACooldown, FALSE, 5 SECONDS) - to_chat(target,"You've been hit by bluespace artillery!") log_and_message_admins("[key_name(target)] has been hit by Bluespace Artillery fired by [key_name(user ? user : usr)]") @@ -68,10 +60,12 @@ if(prob(80)) T.break_tile_to_plating() else T.break_tile() - if(target.health == 1) + playsound(T, get_sfx("explosion"), 100, 1, get_rand_frequency(), falloff = 5) // get_sfx() is so that everyone gets the same sound + + if(target.health < 10) target.gib() else - target.adjustBruteLoss( min( 99 , (target.health - 1) ) ) + target.adjustBruteLoss( max( 99 , (target.health - 1) ) ) target.Stun(20) target.Weaken(20) target.stuttering = 20 diff --git a/code/modules/ai/ai_holder_fleeing.dm b/code/modules/ai/ai_holder_fleeing.dm index 83a7be94b8..7e9b78b1f4 100644 --- a/code/modules/ai/ai_holder_fleeing.dm +++ b/code/modules/ai/ai_holder_fleeing.dm @@ -18,6 +18,8 @@ if(can_flee) if(special_flee_check()) return TRUE + if(isbelly(holder.loc)) //VOREStation Add - Don't flee while you're in a tummy, silly + return FALSE //VOREStation Add if(!hostile && !retaliate) return TRUE // We're not hostile and someone attacked us first. if(flee_when_dying && (holder.health / holder.getMaxHealth()) <= dying_threshold) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 0f5fe03f8a..f4d544f040 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -16,13 +16,13 @@ /obj/item/device/assembly_holder/proc/attach(var/obj/item/device/assembly/D, var/obj/item/device/assembly/D2, var/mob/user) if(!D || !D2) return FALSE - + if(!istype(D) || !istype(D2)) return FALSE if(D.secured || D2.secured) return FALSE - + if(user) user.remove_from_mob(D) user.remove_from_mob(D2) @@ -151,7 +151,7 @@ if(!D) return 0 if(!secured) - visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") if((normal) && (a_right) && (a_left)) if(a_right != D) a_right.pulsed(0) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 66ed0c186a..c4c4e09e19 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -98,7 +98,7 @@ pulse(0) QDEL_LIST_NULL(i_beams) //They will get recreated next process() if the situation is still appropriate if(!holder) - visible_message("[bicon(src)] *beep* *beep*") + visible_message("\icon[src][bicon(src)] *beep* *beep*") /obj/item/device/assembly/infra/tgui_interact(mob/user, datum/tgui/ui) if(!secured) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index cc74445993..0561eb4797 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -47,7 +47,7 @@ var/turf/mainloc = get_turf(src) pulse(0) if(!holder) - mainloc.visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + mainloc.visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") /obj/item/device/assembly/prox_sensor/process() if(scanning) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index daca806f2d..3ae5c0c73e 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -117,7 +117,7 @@ if(!holder) for(var/mob/O in hearers(1, src.loc)) - O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) + O.show_message("\icon[src][bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) /obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) if(!frequency) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 33fefb58bf..0353986b57 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -44,7 +44,7 @@ return 0 pulse(0) if(!holder) - visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") /obj/item/device/assembly/timer/process() if(timing && time-- <= 0) diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 66026a7993..7c8eee7fdf 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -13,7 +13,7 @@ recorded = msg listening = 0 var/turf/T = get_turf(src) //otherwise it won't work in hand - T.visible_message("[bicon(src)] beeps, \"Activation message is '[recorded]'.\"") + T.visible_message("\icon[src][bicon(src)] beeps, \"Activation message is '[recorded]'.\"") else if(findtext(msg, recorded)) pulse(0) @@ -23,7 +23,7 @@ if(!holder) listening = !listening var/turf/T = get_turf(src) - T.visible_message("[bicon(src)] beeps, \"[listening ? "Now" : "No longer"] recording input.\"") + T.visible_message("\icon[src][bicon(src)] beeps, \"[listening ? "Now" : "No longer"] recording input.\"") /obj/item/device/assembly/voice/attack_self(mob/user) diff --git a/code/modules/blob2/overmind/overmind.dm b/code/modules/blob2/overmind/overmind.dm index cdfe6d766a..625dca158f 100644 --- a/code/modules/blob2/overmind/overmind.dm +++ b/code/modules/blob2/overmind/overmind.dm @@ -25,7 +25,7 @@ var/list/overminds = list() universal_understand = TRUE - var/list/has_langs = list(LANGUAGE_BLOB) + var/list/has_langs = list(LANGUAGE_ANIMAL) var/datum/language/default_language = null /mob/observer/blob/get_default_language() diff --git a/code/modules/casino/boxes_casino.dm b/code/modules/casino/boxes_casino.dm new file mode 100644 index 0000000000..3b4c548056 --- /dev/null +++ b/code/modules/casino/boxes_casino.dm @@ -0,0 +1,94 @@ +/obj/item/weapon/storage/box/casino + name = "prize box" + desc = "It's a lovely golden tinted cardboard box, maybe theres something valuable inside?" + icon = 'icons/obj/casino.dmi' + icon_state = "casino_box" + +/obj/item/weapon/storage/box/casino/costume_marine + name = "ruin marine costume" + starts_with = list( + /obj/item/clothing/head/marine, + /obj/item/clothing/suit/marine + ) + +/obj/item/weapon/storage/box/casino/costume_pirate + name = "pirate costume" + starts_with = list( + /obj/item/clothing/under/pirate, + /obj/item/clothing/suit/pirate, + /obj/item/clothing/head/pirate, + /obj/item/clothing/glasses/eyepatch + ) + +/obj/item/weapon/storage/box/casino/costume_commie + name = "communist costume" + starts_with = list( + /obj/item/clothing/under/soviet, + /obj/item/clothing/head/ushanka + ) + +/obj/item/weapon/storage/box/casino/costume_wizard + name = "wizard costume" + starts_with = list( + /obj/item/clothing/suit/wizrobe/fake, + /obj/item/clothing/head/wizard/fake, + /obj/item/weapon/staff + ) + +/obj/item/weapon/storage/box/casino/costume_plaguedoctor + name = "plague doctor costume" + starts_with = list( + /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, + /obj/item/clothing/head/plaguedoctorhat + ) + +/obj/item/weapon/storage/box/casino/costume_cowboy + name = "cowboy costume" + starts_with = list( + /obj/item/clothing/under/cowboy, + /obj/item/clothing/accessory/holster/hip, + /obj/item/clothing/head/cowboy/ranger, + /obj/item/clothing/shoes/boots/cowboy/brown + ) + +/obj/item/weapon/storage/box/roulette_balls_normal + name = "roulette ball box" + desc = "A box of spare roulette balls." + icon_state = "balls" + can_hold = list(/obj/item/roulette_ball) + starts_with = list( + /obj/item/roulette_ball = 7, + /obj/item/roulette_ball/hollow = 2) + +/obj/item/weapon/storage/box/roulette_balls_fancy + name = "fancy roulette ball box" + desc = "A box of extra-pretty roulette balls." + icon_state = "balls" + can_hold = list(/obj/item/roulette_ball) + starts_with = list( + /obj/item/roulette_ball, + /obj/item/roulette_ball/hollow, + /obj/item/roulette_ball/red, + /obj/item/roulette_ball/orange, + /obj/item/roulette_ball/yellow, + /obj/item/roulette_ball/green, + /obj/item/roulette_ball/blue, + /obj/item/roulette_ball/purple, + /obj/item/roulette_ball/moon, + /obj/item/roulette_ball/planet, + /obj/item/roulette_ball/gold) + +/obj/item/weapon/storage/box/roulette_balls_cheat + name = "special roulette ball box" + desc = "A box of 'special' roulette balls." + icon_state = "balls" + can_hold = list(/obj/item/roulette_ball) + starts_with = list( + /obj/item/roulette_ball/cheat/first_twelve, + /obj/item/roulette_ball/cheat/second_twelve, + /obj/item/roulette_ball/cheat/third_twelve, + /obj/item/roulette_ball/cheat/red, + /obj/item/roulette_ball/cheat/black, + /obj/item/roulette_ball/cheat/zeros, + /obj/item/roulette_ball/cheat/odd, + /obj/item/roulette_ball/cheat/even) \ No newline at end of file diff --git a/code/modules/casino/casino.dm b/code/modules/casino/casino.dm index 569607bc0f..364ab817f7 100644 --- a/code/modules/casino/casino.dm +++ b/code/modules/casino/casino.dm @@ -5,10 +5,9 @@ // //Roulette Table // - /obj/structure/casino_table name = "casino table" - desc = "this is an unremarkable table for a casino." + desc = "This is an unremarkable table for a casino." icon = 'icons/obj/casino.dmi' icon_state = "roulette_table" density = 1 @@ -27,63 +26,331 @@ /obj/structure/casino_table/roulette_table name = "roulette" - desc = "Spin the roulette to try your luck." + desc = "The roulette. Spin to try your luck." icon_state = "roulette_wheel" + var/spin_state = "roulette_wheel_spinning" + + var/obj/item/roulette_ball/ball + +/obj/structure/casino_table/roulette_table/Initialize() + .=..() + ball = new(src) + return + +/obj/structure/casino_table/roulette_table/examine(mob/user) + .=..() + if(ball) + . += "It's currently using [ball.get_ball_desc()]." + else + . += "It doesn't have a ball." /obj/structure/casino_table/roulette_table/attack_hand(mob/user as mob) - if (busy) + if(busy) to_chat(user,"You cannot spin now! The roulette is already spinning. ") return - visible_message("\ [user] spins the roulette and throws inside little ball.") + if(!ball) + to_chat(user,"This roulette wheel has no ball! ") + return + visible_message("\The [user] spins the roulette and throws [ball.get_ball_desc()] into it.") playsound(src.loc, 'sound/machines/roulette.ogg', 40, 1) busy = 1 - icon_state = "roulette_wheel_spinning" - var/result = rand(0,36) + ball.on_spin() + icon_state = spin_state + var/result = rand(0,37) + if(ball.cheatball) + result = ball.get_cheated_result() var/color = "green" add_fingerprint(user) - if ((result>0 && result<11) || (result>18 && result<29)) - if (result%2) + if((result > 0 && result < 11) || (result > 18 && result < 29)) + if(result % 2) color="red" - else - color="black" - if ( (result>10 && result<19) || (result>28) ) - if (result%2) + else color="black" - else - color="red" + if((result > 10 && result < 19) || (result > 28 && result < 37)) + if(result % 2) + color="black" + else + color="red" + if(result == 37) + result = "00" spawn(5 SECONDS) visible_message("The roulette stops spinning, the ball landing on [result], [color].") - busy=0 - icon_state = "roulette_wheel" + busy = 0 + icon_state = initial(icon_state) + +/obj/structure/casino_table/roulette_table/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W, /obj/item/roulette_ball)) + if(!ball) + user.drop_from_inventory(W) + W.forceMove(src) + ball = W + to_chat(user, "You insert [W] into [src].") + return + ..() + +/obj/structure/casino_table/roulette_table/verb/remove_ball() + set name = "Remove Roulette Ball" + set category = "Object" + set src in oview(1) + + if(!usr || !isturf(usr.loc)) + return + if(usr.stat || usr.restrained()) + return + if(ismouse(usr) || (isobserver(usr))) + return + + if(busy) + to_chat(usr, "You cannot remove \the [ball] while [src] is spinning!") + return + + if(ball) + usr.put_in_hands(ball) + to_chat(usr, "You remove \the [ball] from [src].") + ball = null + return + else + to_chat(usr, "There is no ball in [src]!") + return + +/obj/structure/casino_table/roulette_table/long + icon_state = "roulette_wheel_long" + spin_state = "roulette_wheel_long_spinning" + +/obj/structure/casino_table/roulette_long + name = "roulette table" + desc = "Roulette table." + icon_state = "roulette_long" /obj/structure/casino_table/roulette_chart name = "roulette chart" desc = "Roulette chart. Place your bets!" icon_state = "roulette_table" -// -//Blackjack table - no sprite -// +/obj/item/roulette_ball + name = "roulette ball" + desc = "A small ball used for roulette wheel. This one is made of regular metal." + var/ball_desc = "a small metal ball" + icon = 'icons/obj/casino.dmi' + icon_state = "roulette_ball" + var/cheatball = FALSE + +/obj/item/roulette_ball/proc/get_cheated_result() + return rand(0,37) // No cheating by default + +/obj/item/roulette_ball/proc/get_ball_desc() + return ball_desc + +/obj/item/roulette_ball/proc/on_spin() + return + +/obj/item/roulette_ball/gold + name = "golden roulette ball" + desc = "A small ball used for roulette wheel. This one is particularly gaudy." + ball_desc = "a shiny golden ball" + icon_state = "roulette_ball_gold" + +/obj/item/roulette_ball/red + name = "red roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate red." + ball_desc = "a striped red ball" + icon_state = "roulette_ball_red" + +/obj/item/roulette_ball/orange + name = "orange roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate orange." + ball_desc = "a striped orange ball" + icon_state = "roulette_ball_orange" + +/obj/item/roulette_ball/green + name = "green roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate green." + ball_desc = "a smooth green ball" + icon_state = "roulette_ball_green" + +/obj/item/roulette_ball/blue + name = "blue roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate blue." + ball_desc = "a striped blue ball" + icon_state = "roulette_ball_blue" + +/obj/item/roulette_ball/yellow + name = "yellow roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate yellow." + ball_desc = "a smooth yellow ball" + icon_state = "roulette_ball_yellow" + +/obj/item/roulette_ball/purple + name = "purple roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate purple." + ball_desc = "a dotted purple ball" + icon_state = "roulette_ball_purple" + +/obj/item/roulette_ball/planet + name = "planet roulette ball" + desc = "A small ball used for roulette wheel. This one looks like a small earth-like planet." + ball_desc = "a planet-like ball" + icon_state = "roulette_ball_earth" + +/obj/item/roulette_ball/moon + name = "moon roulette ball" + desc = "A small ball used for roulette wheel. This one looks like a small moon." + ball_desc = "a moon-like ball" + icon_state = "roulette_ball_moon" + +/obj/item/roulette_ball/hollow + name = "glass roulette ball" + desc = "A small ball used for roulette wheel. This one is made of glass and seems to be openable." + ball_desc = "a small glass ball" + icon_state = "roulette_ball_glass" + + var/obj/item/weapon/holder/trapped + +/obj/item/roulette_ball/hollow/examine(mob/user) + .=..() + if(trapped) + . += "You can see [trapped] trapped inside!" + else + . += "It appears to be empty." + +/obj/item/roulette_ball/hollow/get_ball_desc() + .=..() + if(trapped && trapped.held_mob) + . += " with [trapped.name] trapped within" + return + +/obj/item/roulette_ball/hollow/attackby(var/obj/item/W, var/mob/user) + if(trapped) + to_chat(user, "This ball already has something trapped in it!") + return + if(istype(W, /obj/item/weapon/holder)) + var/obj/item/weapon/holder/H = W + if(!H.held_mob) + to_chat(user, "This holder has nobody in it? Yell at a developer!") + return + if(H.held_mob.get_effective_size(TRUE) > 50) + to_chat(user, "\The [H] is too big to fit inside!") + return + user.drop_from_inventory(H) + H.forceMove(src) + trapped = H + to_chat(user, "You trap \the [H] inside the glass roulette ball.") + to_chat(H.held_mob, "\The [user] traps you inside a glass roulette ball!") + update_icon() + +/obj/item/roulette_ball/hollow/update_icon() + if(trapped && trapped.held_mob) + icon_state = "roulette_ball_glass_full" + else + icon_state = "roulette_ball_glass" + +/obj/item/roulette_ball/hollow/attack_self(mob/user as mob) + if(!trapped) + to_chat(user, "\The [src] is empty!") + return + else + user.put_in_hands(trapped) + if(trapped.held_mob) + to_chat(user, "You take \the [trapped] out of the glass roulette ball.") + to_chat(trapped.held_mob, "\The [user] takes you out of a glass roulette ball.") + trapped = null + update_icon() + +/obj/item/roulette_ball/hollow/on_holder_escape() + trapped = null + update_icon() + +/obj/item/roulette_ball/hollow/on_spin() + if(trapped && trapped.held_mob) + to_chat(trapped.held_mob, "THE WHOLE WORLD IS SENT WHIRLING AS THE ROULETTE SPINS!!!") + +/obj/item/roulette_ball/hollow/Destroy() + if(trapped) + trapped.forceMove(src.loc) + trapped = null + return ..() + +/obj/item/roulette_ball/cheat + cheatball = TRUE + +/obj/item/roulette_ball/cheat/first_twelve + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on first 12." + +/obj/item/roulette_ball/cheat/first_twelve/get_cheated_result() + return pick(list(1,2,3,4,5,6,7,8,9,10,11,12)) + +/obj/item/roulette_ball/cheat/second_twelve + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on second 12." + +/obj/item/roulette_ball/cheat/second_twelve/get_cheated_result() + return pick(list(13,14,15,16,17,18,19,20,21,22,23,24)) + +/obj/item/roulette_ball/cheat/third_twelve + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on third 12." + +/obj/item/roulette_ball/cheat/third_twelve/get_cheated_result() + return pick(list(25,26,27,28,29,30,31,32,33,34,35,36)) + +/obj/item/roulette_ball/cheat/zeros + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on 0 or 00." + +/obj/item/roulette_ball/cheat/zeros/get_cheated_result() + return pick(list(0, 37)) + +/obj/item/roulette_ball/cheat/red + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on red." + +/obj/item/roulette_ball/cheat/red/get_cheated_result() + return pick(list(1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36)) + +/obj/item/roulette_ball/cheat/black + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on black." + +/obj/item/roulette_ball/cheat/black/get_cheated_result() + return pick(list(2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35)) + +/obj/item/roulette_ball/cheat/even + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on even." + +/obj/item/roulette_ball/cheat/even/get_cheated_result() + return pick(list(2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36)) + +/obj/item/roulette_ball/cheat/odd + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on odd." + +/obj/item/roulette_ball/cheat/odd/get_cheated_result() + return pick(list(1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35)) + +// +//Blackjack table +// /obj/structure/casino_table/blackjack_l name = "gambling table" - desc = "Gambling table, try your luck and skills! " + desc = "Gambling table, try your luck and skills!" icon_state = "blackjack_l" -/obj/structure/casino_table/blackjack_r - name = "gambling table" - desc = "Gambling table, try your luck and skills! " - icon_state = "blackjack_r" - /obj/structure/casino_table/blackjack_m name = "gambling table" - desc = "Gambling table, try your luck and skills! " + desc = "Gambling table, try your luck and skills!" icon_state = "blackjack_m" +/obj/structure/casino_table/blackjack_r + name = "gambling table" + desc = "Gambling table, try your luck and skills!" + icon_state = "blackjack_r" + +// +//Craps table +// +/obj/structure/casino_table/craps + name = "craps table" + desc = "A padded table designed for dice games!" + icon_state = "craps_table" + // //Wheel. Of. FORTUNE! // - /obj/machinery/wheel_of_fortune name = "wheel of fortune" desc = "The Wheel of Fortune! Insert chips and may fortune favour the lucky one at the next lottery!" @@ -269,7 +536,6 @@ // //Slave Terminal // - /obj/machinery/casinoslave_handler name = "Sentient Prize Automated Sales Machinery" desc = "The Sentient Prize Automated Sales Machinery, also known as SPASM! Here one can see who is on sale as sentinet prizes, as well as selling self and also buying prizes." diff --git a/code/modules/casino/casino_book.dm b/code/modules/casino/casino_book.dm new file mode 100644 index 0000000000..1b3ee5163e --- /dev/null +++ b/code/modules/casino/casino_book.dm @@ -0,0 +1,283 @@ + +//Original Casino Code created by Shadowfire117#1269 - Ported from CHOMPstation +//Modified by GhostActual#2055 for use with VOREstation + +// +//Casino Manual - NEEDS EDITING +// +/obj/item/weapon/book/manual/casino + name = "A dummy guide to losing your thalers" + icon = 'icons/obj/casino.dmi' + icon_state ="casinomanual" + author = "Sleazy Serpent Saren" + w_class = 2 // To allow it to be stuffed away into wallets for easy readings during events + title = "A dummy guide to losing your thalers" + dat = {" + + + + + +

    Contents

    +
      +
    1. Foreword: Welcome to gambling!
    2. +
    3. Blackjack
    4. +
    5. Roulette
    6. +
    7. Poker
    8. +
    9. Cards against the galaxy
    10. +
    11. Prizes
    12. +
    13. Sentient prizes
    14. +
    +
    +

    Foreword: Welcome to gambling!

    + In this book I'll teach you all about how to gamble your money away or at least get lucky and win some! This book also has a handy little overview of the prizes one can earn and the limitations of what can do with the living and breathing ones.
    + (This book will also contain out of character information to help people be aware of how touchy subjects like sentient prizes are to be handled.) + +

    Blackjack

    + First up is the classic sport of blackjack, blackjack is played normally between a gambler and a dealer, the goal is to have the higher number than the opponent but not go above 21 or it will be a bust and one loses automatically.
    + The values of cards are as follow: +
      +
    • Ace - 1 or 11, can be freely decided at any moment
    • +
    • 2 - 10 - value coresponding to their number
    • +
    • All face cards excluding joker - Value of 10
    • +
    + A game of blackjack begins with the dealer giving the gambler two cards, in normal blackjack all cards dealt to gambler and dealer are always shown. The two cards dealt have their values put together, the gambler has three choices, stand, hit, or double down. +
      +
    • Stand - Gambler or dealer decides not to draw any more cards and it becomes the dealers turn or ends.
    • +
    • Hit - 10 - The dealer draws a new card, adding to the existing hand, if its a bust the game will end and they will lose.
    • +
    • Double down - A risky move the gambler can do, the dealer draws one more card and the bet is doubled, but no more cards can be drawn and it becomes the dealer's turn.
    • +
    + When it becomes the dealer's turn they do the same as the gambler, though their only goal is to get a higher or equal value to gambler. The dealer cant double down, and the large majority of casino's has the rule that a dealer cant draw anymore cards once they reach or go above a value. The most common value is 17, and there are two variants to that rule, soft and hard 17. +
      +
    • Soft 17 - If the gambler gets 17, they can draw another card.
    • +
    • Hard 17 - They dealer must stop if they get a value of 17.
    • +
    + The casino who supplies this version of the manual follows the rule of hard 17.
    + The game ends when the dealer busts, reaches the threshold of what they are allowed to draw, or if they get a higher value than the gambler. Again, the one who has the highest value that isnt higher than 21 wins, but if both has the same value no one wins and the bet goes back to the gambler.
    + And thats it! Now go out there and gamble your savings away! This casino allows bets between 5 and 50 with double down ignoring that limit!

    + + But wait! Theres more! Theres also group blackjack! This game is a little different, the dealer can be part of it or simple deal for players, this game works differently with everyone keeping their hands hidden, everyone makes initial bets, gets two facedown cards, then its a matter of trying to get as good a hand as possible, but if you go bust, its over. But dont tell or show until everyone reveals! If youre going down, its best if youre opponents dont know they simply can play safe and win, if youre lucky everyone else gets themselves busted and you dont lose your beloved chips!
    + Its kinda like texas hold em in a way, everyone draws, folks can raise bets or fold, then draw more. Rinse and repeat until no one wants to raise any more nor draw cards, if everyone except one person has folded, they win by default even if they have busted, cause they dont need to reveal their hand that game, so you can choose to either sit and wait and fold if someone raise the bets, or you can gamble and make it look like you have an amazing hand and win by default since everyone else folds and no one is wise that you had a bust! This game has turned from simple probability and chance against the dealer to a game of risk and deception, fun fun fun! + +

    Roulette

    + So this game of roulette is all about chance! what happens is that people bet on different odds and hope for the best as the dealer rolls the ball and makes that roulette thingy make than fun addicting spin! Once it lands on a number between 0 and 36 its either bust or payout! Pretty simple, right?
    + Everyone starts by putting their bets down, people can bet more than once before the ball goes rolling, the odds and their payoffs are these: +
      +
    • Single number - 35/1 payoff - The most unlikely one to get, but if the ball lands on your number, then youre loaded!
    • +
    • Split Number - 17/1 - Choose an interval of 2, not very likely and therefore big reward!
    • +
    • Row - 11/1 - Choose an interval of 3, more likely so not the biggest outcome!
    • +
    • Split - 8/1 - Choose an interval of 4, not gonna win big time.
    • +
    • Split row - 5/1 - Choose an interval of 6, getting to the safer bets.
    • +
    • Column - 2/1 - Choose an interval of 12, boring, but likely.
    • +
    • Red/Black or even/odd numbers - 1/1 - Odd or even numbers explains themselves. Red numbers are from 0 to 11 and 18 to 29 while the rest is black. These are the safest bets there are!
    • +
    + Theres not much more to it! Bets made, ball rolls, number announced, people win, people lose! Bets allowed here are from 1 to 25 per bet. Oh, im also being told this casino has the fancy rule that if ball lands on 0, one wins at least one bet no matter what it is! So lets hope you got that big bet on a single number! + +

    Poker

    + Aaah yes, good old poker. This casino runs by the rules of texas hold em, though the might be a little modified to be simpler for the average joe. In a game of poker it can be a single gambler and a dealer against each other, but most often its the dealer making the game proceed while several gamblers fights tooth and nail to steal each others chips, but the dealer can still join in on the free for all if they so wish!
    + To simply explain the game, people gamble with each other, a game of trying to get the best hand and raise bets or back out depending on what the outcome may be. The game starts with everyone betting a certain amount, it can be 5 or 10 chips depending on dealer, but if one wants to join, there needs to be chips on that table! Once everyone has made their initial bet, everyone gets two cards face down, these are kept hidden, no one not even dealer gets to see players cards until the end, not even folded cards are to be shown unless wanted to, sometimes its better making people unsure if you dropped out with bad cards or if you have other motives, deception is a large part of this game!
    + With everyone having cards dealt, its time for the dealer to lay three on the table face up, these cards are 3 of 5 cards in the community pool, everyone can use these cards to make sets like pairs and such, this doesnt mean they are taken, multiple people can use the same community card for their own sets!
    + With the community having three we enter the second betting stage, here people have two options, standing or raising. Standing means you dont want to raise, raising explains itself, though if someone bets, people have three options, commit putting the chips in to risk as much as the raised bet, but if one doesnt have enough, then they can still go all in with their remaining chips, one can also drop out if its too risky, the chips bet will remain on the table, but at least you wont lose more eh? Final one is to raise further, sometimes people can dare each other to raise more, but its not allowed for someone to raise, then raise further if no one else raises after them!
    + As said earlier, we got like a community pool of 5 cards total, this time another card is revealed and we enter a new betting phase, then the final fifth card is revealed and final bets are made, and then the cards are revealed so it can be determined who has the best hand! If two or more have equally good sets, then the chips are split evenly between them.
    + But notice, if someone is left because everyone else didnt dare to raise with their bet, they can decide to not reveal their hand, they might have had a winning hand, or maybe its terrible and they just bluffed their way to victory, only they know and can decide if they want to expose their cards to gloat or confuse their opponents. So in summary, the game can be simple, but hard to master!

    + And here is the order of winning hands folks! +
      +
    • Royal flush - The big and best one, this is a set of a 10, Ace, Knave/Jack, Queen and King of the same suit.
    • +
    • Straight flush - This one is also definently a winner, though can be easier to get as it just needs to be five cards making a sraight of the same suit, an example being black 3 to 7.
    • +
    • Four of a kind - Nice one, if you get this then you got a good chance to win. The value of the cards determine who wins, so ace is the best followed by king, queen and jack, then the peasant number cards!
    • +
    • Full House - This one is good, but it requires you have three of a kind and a two of a kind, obviously value is part of the house, so the best roof is made of Ace with king making a strong foundation!
    • +
    • Flush - This one requires the gambler to have 5 cards of a suit, not in any order, but the highest value card determines worth, so hope you got an Ace in your combo!
    • +
    • Straight - Its like the royal flush, but can be any suits in combo, Ace can be lowest from Ace to 5 or highest from 10 to Ace!
    • +
    • Three of a kind - Explains itself well enough, get three together and you got something going, lets hope you can build a house!
    • +
    • Two pairs - You almost got yourself a house! But at least at this point its something!
    • +
    • A pair - The worst set you can get, but you might be extremely lucky and have this while others have an inferior pair or the worst possible hand ever which is...
    • +
    • High card - The absolute worst, if you cant get any of those sets, then you got this sad case, if a game mananages to end with no one getting a set, then the one with the highest value cards wins!
    • + +
    + Wew, what a long lesson, but thats how one does the Texas hold em here at this casino, hope you guys have fun winning and losing your hard earned cash with this one! + +

    Cards against the galaxy

    + + So hear this, NT is now sponsoring team building at the casino, so folks who wants to just relax with friends, play some games, earn chips with no risk, even the ones broke can join in on a fun game of Cards against the galaxy and have fun!
    + The idea is that once a round has concluded and a casino member is present to see the game being actually played, everyone gets 10 chips while the one who won the round gets 25 instead! Interested? Good! Its easy and simple to play and very fun and vulgar!

    + + The game is best played with at least 4 players and starts with everyone drawing 7 white cards, the person who most recently pooped starts as the 'card czar', but folks can agree on another criteria for the czar or simply pick one. Each round the current card czar draws a black card that has text written on it and blank lines, everyone aside from the czar takes a white card from their hand for every blank line which they find funny in that sentence and puts on the table face down with the others. The card czar cant know who has which white card and simply reads the black card with the white ones, the most funniest combination is choosen by the czar and the one who made that combination is the current rounds winner and the next rounds czar. At the end of each round everyone makes sure to draw enough white card to have 7 on hand and if theres a casino staff member playing or watching, they note down or hand out chips for everyone, and if they are playing, they get to add chips to their own personal stockpile too!
    + Thats it for cards against the galaxy! Simple, fun and vulgar, whats there not to love? + +

    Prizes

    + + Hey folks, welcome to the prize section! This part is definently important for you folks operating the prize booth! First off I wanna tell you some great news! Nanotransen has gone along with a nice deal that allows crew to occasionally keep their hard earned rewards on station for a limited time, now you can enjoy your new fancy toolbelt or bluespace beaker for more than just the shift where the casino comes around!
    + ((Be aware, there can be limitations on how many rewards you get to keep after the shift, it might be unfair if some shows up and wins one thing, while they watch as command staff crew with high background income as well as hyperactive miners walks home with 20 prizes they get to enjoy while having almost done no gambling at all.))

    + + Lets get to the prizes and exchange rate before we get started on the stuff specifically for the booth operators, so heres the current prizes one can win and their costs! Be aware there might be new prizes or absent ones from time to time!
    + + EXCHANGE RATE
    + FROM = TO
    + 5 Thalers = 1 casino chip
    + 1 casino chip = 5 Thalers

    + + The special sentient prize is 100 chips! More about it in section below!

    + + Melee weapons +
      +
    • scepter 500
    • +
    • chain of command 250
    • +
    + Guns and 'guns' ((disclaimer, giving out guns will mean you get a weapons license as well with the shifts you have it, abusing these weapons will quickly get them removed!)) +
      +
    • sizegun 100
    • +
    • advanced anti particle rifle 500
    • +
    • temperature gun 250
    • +
    • alien pistol 1000
    • +
    • floral somatoray 250
    • +
    • net gun 500
    • +
    + Gear +
      +
    • experimental welder 500
    • +
    • alien belt 750
    • +
    • alien enhancement vest 750
    • +
    • The monocoole 1000
    • +
    • chameleon black tie 250
    • +
    • cryostasis beaker 200
    • +
    • bluespace beaker 200
    • +
    • chem sprayer 250
    • +
    + Masks and hats - EVERYTHING IS 50 except chameleon! +
      +
    • assistant hat
    • +
    • Shark mask
    • +
    • Pig mask
    • +
    • Luchador mask
    • +
    • Horse mask
    • +
    • Goblin mask
    • +
    • Fake moustache
    • +
    • Dolphin mask
    • +
    • Demon mask
    • +
    • Chameleon gas mask 250
    • +
    + Costumes - All costumes are 100 except the hoodies which are 50! +
      +
    • Black bunny girl outfit (black suit and rabbit ears)
    • +
    • White bunny girl outfit (white suit and rabbit ears)
    • +
    • Corgi hoodie
    • +
    • Sexy clown
    • +
    • nyan girl
    • +
    • Wizard
    • +
    • Chicken
    • +
    • Carp hoodie
    • +
    • Sexy mime
    • +
    • Pirate
    • +
    • Commie
    • +
    • Plague doctor
    • +
    • Imperium monk
    • +
    • Cute witch
    • +
    • Gladiator
    • +
    + Toys and misc - ALL THESE ARE 50 +
      +
    • Toy sword
    • +
    • Water flower
    • +
    • Stick horse
    • +
    • Replica katana
    • +
    • Magic conch
    • +
    • Magic 8-ball
    • +
    • Foam sword
    • +
    • Foam crossbow (with 5 bolts)
    • +
    • Bosun's whistle
    • +
    • Golden cup
    • +
    • Havana cigar case
    • +
    • Casino wallet (to keep after shift)
    • +
    • Casino card deck (to keep after shift)
    • +
    + Booze - ALL BOOZE IS 50 +
      +
    • Redeemer brew
    • +
    • Warlock velvet
    • +
    • Wrapp artiste patron
    • +
    • Flask of holy water
    • +
    • College girl goldschlager
    • +
    • Gilthari luxury champagne
    • +
    • Bottle of nothing
    • +
    • Special blend whiskey
    • +
    • Akvavit
    • +
    + Pets +
      +
    • Armadillo 150
    • +
    • Cat 150
    • +
    • Goat 150
    • +
    • Fox 150
    • +
    • Lizard 150
    • +
    • Penguin 150
    • +
    • Goose 200
    • +
    • Chicken 200
    • +
    • Cow 200
    • +
    • Corgi 200
    • +
    • Snake 200
    • +
    • Yithian 200
    • +
    • Tindalos 200
    • +
    • Fennec 300
    • +
    • Red Panda 300
    • +
    • Horse 300
    • +
    • Otie 500
    • +
    • Chonker Otie 500
    • +
    • Zorgoia 500
    • +
    + Mechs +
      +
    • Mining Ripley 1000
    • +
    • Firefighter Ripley 750
    • +
    • Serenity 1500
    • +
    • Odysseus 1250
    • +
    • Phazon Scuttlebug 2000
    • +
    • Phazon Janus 3500
    • +
    • Scarab 500
    • +
    • Shuttlepod 250
    • +
    • ´Shuttlecraft 500
    • +
    + Implants +
      +
    • Implanter 100 (A basic empty implanter, you are going to need this to implant yourself with cyberntic augments)
    • +
    • Implant: Tazer 1000 (A cybernetic implant that allows one to spawn a personal defense taser)
    • +
    • Implant: Medkit 500 (A cybernetic implant that allows you to spawn all the tools needed for surgery)
    • +
    • Implant: Shades 750 (A cybernetic implant that will spawn protective thermoshades upon your eyes, AR included!)
    • +
    • Implant: Sprinter 1500 (A cybernetic implant that will give you that extra kick of energy to run faster!)
    • +
    • Implant: Toolkit 500 (A cybernetic implant that allows you to spawn all the tools needed for engineering)
    • +
    • Implant: Language 1000 (A cybernetic implant that allows you to understand almost all languages)
    • +
    • Implant: Analyzer 500 (A cybernetic implant that allows one to spawn a Portable Resonant Analyzer for any science needs)
    • +
    • Implant: Size Control 500 (A cybernetic implant that allows one to change the size of others via specific voice commands)
    • +
    + + Thats it for prizes!

    + + Now comes the part for the both operators, you got a very important job, it has a lot of responsibility, so it means that you gotta put that first before your own fun, cause unless you do it, a lot of folks are gonna be left sad and dissappointed they cant get any goodies! But the process is simple and can be quick, someone comes to you, they want some chips, or thalers back or a prize, you simply check this nice guide above to determine cost and ask for the amount of thalers or chips needed, if its a prize, then you follow this procedure: +
      +
    1. First get the thalers or chips for payment.
    2. +
    3. Before giving the prize you take out your prize winner folder and a piece of paper, this paper will be named after the one getting the reward and will have further prizes noted down into it, so make sure its safe in that folder!
    4. +
    5. You write at the top of the document the winner's name, then below write in big letters 'PRIZES' and put each new reward on its own line! ((You skip to a new line by writing < br > without the space between the br and the clamps))
    6. +
    7. Once written down, you just put the paper back in the folder and hand over the prize!
    8. +
    + ((When shift is nearing its end you pray to staff or DM the one responsible for the event, they will get the folder and copy paste all the reward info before shift is over and ensure people get their rewards. This is a very important job and we understand it might not be so fun being restricted during an event, but just like the rest of volunteer staff, you get rewarded with guaranteed prizes to enjoy after the shift for being a big help!))
    + ((This gets to the sour part, cheating and giving others and yourself free prizes and/or chips is absolutely forbidden, this has OOC consequences and will likely blacklist you from being important roles in future events. Though dont fear getting punished even if you havent done anything wrong, we will rather let cheaters slip than let honest players get wrongfully punished!)) + +

    Sentient prizes

    + Goodness me this is quite the casino huh? Who would have thought one could win other people as a prize? Well you can do just about anything you want with them! Be it just company, some less children friendly company, heck you can even eat them or make them eat you! The options and possibilities are quite frankly limitless!
    + Now you might ask, how does one get these fancy prizes? Well they can be obtained by checking in at the exchange both and see the list of prizes, there might be none, there might be many, it depends on volunteers and losers! This brings us first to volunteers and then to losers!
    + Volunteering is simple! Anyone can walk up to the booth and ask to be a sentient prize, what this means is that you get a nice sum of 150 chips for you to do whatever you want, but someone might come at any point and claim you!
    + Losers are obtained differently, if youre completly busted and have nothing left, you become a prize that the one you lost to can do whatever they want with, this means both gamblers and dealers can end up as a prize, though if for whatever reason you dont become their prize, you get added to the list for someone else to enjoy. Becoming a prize means you also get 100 chips in compensation!
    + + Now hear this! The casino has decided that to spice things up, folks can bet themselves at any time and arent already a prize on the list! Doesnt matter if youre rich or broke, playing blackjack or roulette, you can bet yourself in any game and youre worth 250 chips! But be careful, cause if you lose, youre the winners prize! They can keep you, give you to someone else. or to the prize booth and get the chips you would have gotten as volunteer! But if given to the booth, the winner cant buy their prize back for the lower cost!

    + + ((Sour part again, but very important. These sentient prizes can be fun, but one thing always dictates how these things goes down, preferences and ooc wants. If preferences dont line up and people dont agree to do winner/loser scene it becomes sentient prize on list. And someone cant win a prize if the prize ooc doesnt want to do what the winner wants to do. We still wish people to try and reach out and try things with new people and/or new things they are comfortable doing, but never shall anyone be forced into a situation they dont want!)) + + + + "} \ No newline at end of file diff --git a/code/modules/casino/headset_casino.dm b/code/modules/casino/headset_casino.dm new file mode 100644 index 0000000000..fa7f09d401 --- /dev/null +++ b/code/modules/casino/headset_casino.dm @@ -0,0 +1,20 @@ +/obj/item/device/radio/headset/casino + name = "casino headset" + desc = "An updated, modular intercom that fits over the head with extra comfortable for the hardworking casino luxury crew. Has encryption key for scamm-... Kind casino staff channel." + icon = 'icons/obj/casino.dmi' + icon_state = "headset" + origin_tech = list(TECH_ILLEGAL = 1) + ks1type = /obj/item/device/encryptionkey/casino + +/obj/item/device/radio/headset/casino/bowman + name = "casino bowman headset" + icon_state = "headset_alt" + adhoc_fallback = TRUE + origin_tech = list(TECH_ILLEGAL = 2) + +/obj/item/device/encryptionkey/casino + icon = 'icons/obj/casino.dmi' + icon_state = "cypherkey" + channels = list("Casino" = 1) + origin_tech = list(TECH_ILLEGAL = 1) + syndie = 1 \ No newline at end of file diff --git a/code/modules/casino/premium_vendors.dm b/code/modules/casino/premium_vendors.dm new file mode 100644 index 0000000000..ad65cd61c2 --- /dev/null +++ b/code/modules/casino/premium_vendors.dm @@ -0,0 +1,169 @@ + +//Original Casino Code created by Shadowfire117#1269 - Ported from CHOMPstation +//Modified by GhostActual#2055 for use with VOREstation + +// +//The code for Casino Vendors +//Devs Feel free to modify this to vend what you please +// + +// +//Locked Vendors (require access to use) +// +/obj/machinery/vending/deluxe_boozeomat + name = "Premium Drink Distributor" + desc = "A top of the line drink vendor that carries some of the finest drinks in the frontier." + icon = 'icons/obj/casino.dmi' + icon_state = "premiumbooze" + products = list(/obj/item/weapon/glass_extra/stick = 50, + /obj/item/weapon/glass_extra/straw = 50, + /obj/item/weapon/reagent_containers/food/drinks/glass2/square = 25, + /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks = 25, + /obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 25, + /obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail = 25, + /obj/item/weapon/reagent_containers/food/drinks/glass2/shot = 25, + /obj/item/weapon/reagent_containers/food/drinks/glass2/pint = 25, + /obj/item/weapon/reagent_containers/food/drinks/glass2/mug = 25, + /obj/item/weapon/reagent_containers/food/drinks/glass2/wine = 25, + /obj/item/weapon/reagent_containers/food/drinks/glass2/carafe = 2, + /obj/item/weapon/reagent_containers/food/drinks/glass2/pitcher = 2, + /obj/item/weapon/reagent_containers/food/drinks/metaglass = 25, + /obj/item/weapon/reagent_containers/food/drinks/metaglass/metapint = 25, + /obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/sake = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/patron = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/champagne = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/hushedwhisper = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/silverdragon = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/meteor = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/litebeer = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/small/cider = 15, + /obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 50, + /obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 50, + /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 50, + /obj/item/weapon/reagent_containers/food/drinks/tea = 50, + /obj/item/weapon/reagent_containers/food/drinks/bottle/cola = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/space_up = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/milk = 10, + /obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 10, + /obj/item/weapon/reagent_containers/food/drinks/ice = 10 + ) + + contraband = list() + vend_delay = 15 + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + req_access = list(access_bar) + req_log_access = access_bar + has_logs = 1 + vending_sound = "machines/vending/vending_cans.ogg" + +/obj/machinery/vending/deluxe_dinner + name = "Premium Dining Distributor" + desc = "A top of the line drink vendor that carries some of the finest foods in the frontier." + icon = 'icons/obj/casino.dmi' + icon_state = "premiumfood" + products = list(/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger = 30, + /obj/item/weapon/reagent_containers/food/snacks/meatsteak = 30, + /obj/item/weapon/reagent_containers/food/snacks/fries = 30, + /obj/item/weapon/reagent_containers/food/snacks/onionrings = 30, + /obj/item/weapon/reagent_containers/food/snacks/cheeseburrito= 30, + /obj/item/weapon/reagent_containers/food/snacks/enchiladas= 30, + /obj/item/weapon/reagent_containers/food/snacks/meatburrito= 30, + /obj/item/weapon/reagent_containers/food/snacks/taco= 30, + /obj/item/weapon/reagent_containers/food/snacks/cheesenachos= 30, + /obj/item/weapon/reagent_containers/food/snacks/cubannachos= 30, + /obj/item/weapon/reagent_containers/food/snacks/stew= 20, + /obj/item/weapon/reagent_containers/food/snacks/roastbeef = 20, + /obj/item/weapon/reagent_containers/food/snacks/aesirsalad = 20, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi = 20, + /obj/item/weapon/reagent_containers/food/snacks/kitsuneudon = 20, + /obj/item/weapon/reagent_containers/food/snacks/baguette = 30, + /obj/item/weapon/reagent_containers/food/snacks/appletart = 30, + /obj/item/weapon/reagent_containers/food/snacks/muffin = 30, + /obj/item/weapon/reagent_containers/food/snacks/berrymuffin = 30, + /obj/item/weapon/reagent_containers/food/snacks/cherrypie = 30, + /obj/item/weapon/reagent_containers/food/snacks/croissant = 30, + /obj/item/weapon/reagent_containers/food/snacks/pie = 30, + /obj/item/weapon/reagent_containers/food/snacks/poppypretzel = 30, + /obj/item/weapon/reagent_containers/food/snacks/sugarcookie = 30, + /obj/item/weapon/reagent_containers/food/snacks/waffles = 30, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake = 2, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake = 2, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake = 2, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake = 2, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake = 2, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake = 2, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake = 2, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake = 2, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake = 2 + ) + + contraband = list() + vend_delay = 15 + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + req_access = list(access_bar) + req_log_access = access_bar + has_logs = 1 + vending_sound = "machines/vending/vending_cans.ogg" + +/obj/machinery/vending/deluxe_cigs + name = "Premium Tobacco Distributor" + desc = "A top of the line smokes vendor that carries some of the finest tobacco based goods in the frontier." + icon = 'icons/obj/casino.dmi' + icon_state = "premiumcigs" + products = list(/obj/item/weapon/storage/fancy/cigar = 15, + /obj/item/weapon/storage/fancy/cigarettes/carcinomas = 15, + /obj/item/weapon/storage/fancy/cigarettes/professionals = 15, + /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba = 30, + /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 30, + /obj/item/weapon/storage/box/matches = 5, + /obj/item/weapon/flame/lighter/zippo = 10 + ) + + contraband = list() + vend_delay = 15 + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + req_access = list(access_bar) + req_log_access = access_bar + has_logs = 1 + vending_sound = "machines/vending/vending_cans.ogg" + +// +//Unlocked Vendors +// +/obj/machinery/vending/deluxe_boozeomat/open + req_access = null + req_log_access = null + +/obj/machinery/vending/deluxe_dinner/open + req_access = null + req_log_access = null + +/obj/machinery/vending/deluxe_cigs/open + req_access = null + req_log_access = null \ No newline at end of file diff --git a/code/modules/casino/spawnergrenade_casino.dm b/code/modules/casino/spawnergrenade_casino.dm new file mode 100644 index 0000000000..c7a8611b86 --- /dev/null +++ b/code/modules/casino/spawnergrenade_casino.dm @@ -0,0 +1,100 @@ +/obj/item/weapon/grenade/spawnergrenade/casino + name = "Casino Creature Container (Cat)" + desc = "It is set to detonate in 5 seconds. It will release a cat won from the casino prize vendor!" + icon = 'icons/obj/casino.dmi' + icon_state = "casino" + item_state = "flashbang" + origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2) + spawner_type = /mob/living/simple_mob/animal/passive/cat + +// Detonate now just handles the two loops that query for people in lockers and people who can see it. +/obj/item/weapon/grenade/spawnergrenade/casino/detonate() + + if(spawner_type && deliveryamt) + var/turf/T = get_turf(src) + playsound(T, 'sound/effects/phasein.ogg', 100, 1) + + for(var/i=1, i<=deliveryamt, i++) + var/atom/movable/x = new spawner_type(T) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(x, pick(NORTH,SOUTH,EAST,WEST)) + qdel(src) + return + +// +// Creatures +// +/obj/item/weapon/grenade/spawnergrenade/casino/penguin + desc = "It is set to detonate in 5 seconds. It will release a penguin won from the casino prize vendor!" + name = "Casino Creature Container (Penguin)" + spawner_type = /mob/living/simple_mob/animal/passive/penguin + +/obj/item/weapon/grenade/spawnergrenade/casino/chicken + desc = "It is set to detonate in 5 seconds. It will release a chicken won from the casino prize vendor!" + name = "Casino Creature Container (Chicken)" + spawner_type = /mob/living/simple_mob/animal/passive/chicken + +/obj/item/weapon/grenade/spawnergrenade/casino/cow + desc = "It is set to detonate in 5 seconds. It will release a cow won from the casino prize vendor!" + name = "Casino Creature Container (Cow)" + spawner_type = /mob/living/simple_mob/animal/passive/cow + +/obj/item/weapon/grenade/spawnergrenade/casino/corgi + desc = "It is set to detonate in 5 seconds. It will release a corgi won from the casino prize vendor!" + name = "Casino Creature Container (Corgi)" + spawner_type = /mob/living/simple_mob/animal/passive/dog/corgi + +/obj/item/weapon/grenade/spawnergrenade/casino/fox + desc = "It is set to detonate in 5 seconds. It will release a fox won from the casino prize vendor!" + name = "Casino Creature Container (Fox)" + spawner_type = /mob/living/simple_mob/animal/passive/fox + +/obj/item/weapon/grenade/spawnergrenade/casino/fennec + desc = "It is set to detonate in 5 seconds. It will release a fennec won from the casino prize vendor!" + name = "Casino Creature Container (Fennec)" + spawner_type = /mob/living/simple_mob/vore/fennec + +/obj/item/weapon/grenade/spawnergrenade/casino/snake + desc = "It is set to detonate in 5 seconds. It will release a snake won from the casino prize vendor!" + name = "Casino Creature Container (Snake)" + spawner_type = /mob/living/simple_mob/animal/passive/snake + +/obj/item/weapon/grenade/spawnergrenade/casino/redpanda + desc = "It is set to detonate in 5 seconds. It will release a red panda won from the casino prize vendor!" + name = "Casino Creature Container (Red panda)" + spawner_type = /mob/living/simple_mob/vore/redpanda + +/obj/item/weapon/grenade/spawnergrenade/casino/snake + desc = "It is set to detonate in 5 seconds. It will release a snake won from the casino prize vendor!" + name = "Casino Creature Container (Snake)" + spawner_type = /mob/living/simple_mob/animal/passive/snake + +/obj/item/weapon/grenade/spawnergrenade/casino/otie + desc = "It is set to detonate in 5 seconds. It will release a otie won from the casino prize vendor!" + name = "Casino Creature Container (Otie)" + spawner_type = /mob/living/simple_mob/otie/friendly + +// +// Mecha +// +/obj/item/weapon/grenade/spawnergrenade/casino/gygax + desc = "You feel great power inside this small round sphere, with great powers comes great responsibilities!" + name = "Mysterious Grenade" + spawner_type = /obj/mecha/combat/gygax/dark + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining + name = "Casino Mech Container (Mining Ripley)" + spawner_type = /obj/mecha/working/ripley/mining + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter + name = "Casino Mech Container (Firefighter Ripley)" + spawner_type = /obj/mecha/working/ripley/firefighter + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus + name = "Casino Mech Container (Odysseus)" + spawner_type = /obj/mecha/medical/odysseus/loaded + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod + name = "Casino Mech Container (Shuttlepod)" + spawner_type = /obj/mecha/working/hoverpod/shuttlepod \ No newline at end of file diff --git a/code/modules/catalogue/catalogue_data_vr.dm b/code/modules/catalogue/catalogue_data_vr.dm index 349a48c048..4b6da5f71c 100644 --- a/code/modules/catalogue/catalogue_data_vr.dm +++ b/code/modules/catalogue/catalogue_data_vr.dm @@ -93,6 +93,14 @@ of their precursors, leading to a massive divide between commoners and the nobility." //CHOMPedit value = CATALOGUER_REWARD_TRIVIAL +/datum/category_item/catalogue/fauna/altevian + name = "Sapients - Altevian" + desc = "The Altevian are a species of tall, rodent humanoids that are akin to rats for their features. \ + The Altevian, unlike most species, do not have a home planet, nor system, adopting a fully nomadic lifestyle \ + for their survival across the stars. Instead, they have opted to live in massive super capital-class colony-ships \ + with a flagship as their place they would call home." + value = CATALOGUER_REWARD_TRIVIAL + /datum/category_item/catalogue/fauna/shadekin name = "Sapients - Shadekin" desc = "ERROR : No DNA found. ERROR : Ambient energy signature detected. Likely origin from attempt of scanning \ diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 19e8d760d7..b73a5fe290 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -81,10 +81,15 @@ // Runechat messages var/list/seen_messages + //Hide top bars + var/fullscreen = FALSE + //Hide status bar + var/show_status_bar = TRUE + /////////// // INPUT // /////////// - + /// Bitfield of modifier keys (Shift, Ctrl, Alt) held currently. var/mod_keys_held = 0 /// Bitfield of movement keys (WASD/Cursor Keys) held currently. @@ -108,4 +113,4 @@ /// Movement dir of the most recently pressed movement key. Used in cardinal-only movement mode. var/last_move_dir_pressed = NONE - #endif \ No newline at end of file + #endif diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index f68ddc011d..24df219632 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -86,7 +86,7 @@ return sane = TRUE break - + if(!sane) to_chat(src, "Sorry, that link doesn't appear to be valid. Please try again.") return @@ -196,6 +196,8 @@ . = ..() //calls mob.Login() prefs.sanitize_preferences() + if(prefs) + prefs.selecting_slots = FALSE connection_time = world.time connection_realtime = world.realtime @@ -573,3 +575,36 @@ set name = "TguiKeyUp" set hidden = TRUE return // stub + +/client/verb/toggle_fullscreen() + set name = "Toggle Fullscreen" + set category = "OOC" + + fullscreen = !fullscreen + + if (fullscreen) + winset(usr, "mainwindow", "on-size=") + winset(usr, "mainwindow", "titlebar=false") + winset(usr, "mainwindow", "can-resize=false") + winset(usr, "mainwindow", "menu=") + winset(usr, "mainwindow", "is-maximized=false") + winset(usr, "mainwindow", "is-maximized=true") + else + winset(usr, "mainwindow", "menu=menu") + winset(usr, "mainwindow", "titlebar=true") + winset(usr, "mainwindow", "can-resize=true") + winset(usr, "mainwindow", "is-maximized=false") + winset(usr, "mainwindow", "on-size=attempt_auto_fit_viewport") // The attempt_auto_fit_viewport() proc is not implemented yet + +/* +/client/verb/toggle_status_bar() + set name = "Toggle Status Bar" + set category = "OOC" + + show_status_bar = !show_status_bar + + if (show_status_bar) + winset(usr, "input", "is-visible=true") + else + winset(usr, "input", "is-visible=false") +*/ diff --git a/code/modules/client/preference_setup/antagonism/01_basic.dm b/code/modules/client/preference_setup/antagonism/01_basic.dm index feeff7172d..56f05795a3 100644 --- a/code/modules/client/preference_setup/antagonism/01_basic.dm +++ b/code/modules/client/preference_setup/antagonism/01_basic.dm @@ -44,11 +44,11 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None") return TOPIC_REFRESH if(href_list["exploitable_record"]) - var/exploitmsg = sanitize(tgui_input_text(user,"Set exploitable information about you here.","Exploitable Information", html_decode(pref.exploit_record), MAX_RECORD_LENGTH, TRUE), MAX_RECORD_LENGTH, extra = 0) + var/exploitmsg = sanitize(tgui_input_text(user,"Set exploitable information about you here.","Exploitable Information", html_decode(pref.exploit_record), MAX_RECORD_LENGTH, TRUE, prevent_enter = TRUE), MAX_RECORD_LENGTH, extra = 0) if(!isnull(exploitmsg) && !jobban_isbanned(user, "Records") && CanUseTopic(user)) pref.exploit_record = exploitmsg return TOPIC_REFRESH - + if(href_list["antagfaction"]) var/choice = tgui_input_list(user, "Please choose an antagonistic faction to work for.", "Character Preference", antag_faction_choices + list("None","Other"), pref.antag_faction) if(!choice || !CanUseTopic(user)) @@ -60,7 +60,7 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None") else pref.antag_faction = choice return TOPIC_REFRESH - + if(href_list["antagvis"]) var/choice = tgui_input_list(user, "Please choose an antagonistic visibility level.", "Character Preference", antag_visiblity_choices, pref.antag_vis) if(!choice || !CanUseTopic(user)) diff --git a/code/modules/client/preference_setup/antagonism/02_candidacy.dm b/code/modules/client/preference_setup/antagonism/02_candidacy.dm index d922f10669..3ff1aad3fd 100644 --- a/code/modules/client/preference_setup/antagonism/02_candidacy.dm +++ b/code/modules/client/preference_setup/antagonism/02_candidacy.dm @@ -16,6 +16,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set "diona" = 1, // 12 "mutineer" = 1, // 13 "loyalist" = 1, // 14 + "GHOST" = 0, // CHOMPEDIT - add seperate section for ghost roles "pAI candidate" = 1, // 15 //VOREStation Add "lost drone" = 1, // 16 @@ -51,7 +52,12 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set . += "Be [i]: \[BANNED]
    " else . += "Be [i]:[pref.be_special&(1<
    " - n++ + // CHOMPEdit Start - Add header for Ghost roles section + if(i == "GHOST") + . += "

    GHOST ROLES - Roles that are joinable as ghosts, but not true antags.


    " + else + //CHOMPEdit End + n++ /datum/category_item/player_setup_item/antagonism/candidacy/OnTopic(var/href,var/list/href_list, var/mob/user) if(href_list["be_special"]) diff --git a/code/modules/client/preference_setup/general/02_language.dm b/code/modules/client/preference_setup/general/02_language.dm index 039498c3f9..4b15fdc7f0 100644 --- a/code/modules/client/preference_setup/general/02_language.dm +++ b/code/modules/client/preference_setup/general/02_language.dm @@ -1,3 +1,6 @@ +/datum/preferences + var/extra_languages = 0 + /datum/category_item/player_setup_item/general/language name = "Language" sort_order = 2 @@ -5,19 +8,17 @@ /datum/category_item/player_setup_item/general/language/load_character(var/savefile/S) S["language"] >> pref.alternate_languages + S["extra_languages"] >> pref.extra_languages + testing("LANGSANI: Loaded from [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]") S["language_prefixes"] >> pref.language_prefixes //CHOMPEdit Begin S["species"] >> pref.species - S["pos_traits"] >> pref.pos_traits - var/morelang = 0 - for(var/trait in pref.pos_traits) - if(trait==/datum/trait/positive/linguist) - morelang = 1 - pref.num_languages = morelang * 12 //CHOMPEdit End /datum/category_item/player_setup_item/general/language/save_character(var/savefile/S) S["language"] << pref.alternate_languages + S["extra_languages"] << pref.extra_languages + testing("LANGSANI: Saved to [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]") S["language_prefixes"] << pref.language_prefixes /datum/category_item/player_setup_item/general/language/sanitize_character() @@ -26,9 +27,9 @@ var/datum/species/S = GLOB.all_species[pref.species] if(!istype(S)) return - - if(pref.alternate_languages.len > pref.numlanguage()) //CHOMPEdit - pref.alternate_languages.len = pref.numlanguage() // Truncate to allowed length CHOMPEdit + if(pref.alternate_languages.len > (S.num_alternate_languages + pref.extra_languages)) + testing("LANGSANI: Truncated [pref.client]'s character [pref.real_name || "-name not yet loaded-"] language list because it was too long (len: [pref.alternate_languages.len], allowed: [S.num_alternate_languages])") + pref.alternate_languages.len = (S.num_alternate_languages + pref.extra_languages) // Truncate to allowed length // Sanitize illegal languages for(var/language in pref.alternate_languages) @@ -46,18 +47,20 @@ /datum/category_item/player_setup_item/general/language/content() . += "Languages
    " var/datum/species/S = GLOB.all_species[pref.species] + if(pref.alternate_languages.len > (S.num_alternate_languages + pref.extra_languages)) + testing("LANGSANI: Truncated [pref.client]'s character [pref.real_name || "-name not yet loaded-"] language list because it was too long (len: [pref.alternate_languages.len], allowed: [S.num_alternate_languages])") + pref.alternate_languages.len = (S.num_alternate_languages + pref.extra_languages) // Truncate to allowed length if(S.language) . += "- [S.language]
    " if(S.default_language && S.default_language != S.language) . += "- [S.default_language]
    " - if(pref.numlanguage()) //CHOMPEdit + if(S.num_alternate_languages + pref.extra_languages) if(pref.alternate_languages.len) for(var/i = 1 to pref.alternate_languages.len) var/lang = pref.alternate_languages[i] . += "- [lang] - remove
    " - - if(pref.alternate_languages.len < pref.numlanguage()) //CHOMPEdit - . += "- add ([pref.numlanguage() - pref.alternate_languages.len] remaining)
    " //CHOMPEdit + if(pref.alternate_languages.len < (S.num_alternate_languages + pref.extra_languages)) + . += "- add ([(S.num_alternate_languages + pref.extra_languages) - pref.alternate_languages.len] remaining)
    " else . += "- [pref.species] cannot choose secondary languages.
    " @@ -71,7 +74,7 @@ return TOPIC_REFRESH else if(href_list["add_language"]) var/datum/species/S = GLOB.all_species[pref.species] - if(pref.alternate_languages.len >= pref.numlanguage()) //CHOMPEdit + if(pref.alternate_languages.len >= (S.num_alternate_languages + pref.extra_languages)) tgui_alert_async(user, "You have already selected the maximum number of alternate languages for this species!") else var/list/available_languages = S.secondary_langs.Copy() @@ -89,8 +92,12 @@ tgui_alert_async(user, "There are no additional languages available to select.") else var/new_lang = tgui_input_list(user, "Select an additional language", "Character Generation", available_languages) - if(new_lang && pref.alternate_languages.len < pref.numlanguage()) //CHOMPEdit - pref.alternate_languages |= new_lang + if(new_lang && pref.alternate_languages.len < (S.num_alternate_languages + pref.extra_languages)) + var/datum/language/chosen_lang = GLOB.all_languages[new_lang] + if(istype(chosen_lang)) + var/choice = tgui_alert(usr, "[chosen_lang.desc]",chosen_lang.name, list("Take","Cancel")) + if(choice != "Cancel" && pref.alternate_languages.len < (S.num_alternate_languages + pref.extra_languages)) + pref.alternate_languages |= new_lang return TOPIC_REFRESH else if(href_list["change_prefix"]) diff --git a/code/modules/client/preference_setup/general/06_flavor.dm b/code/modules/client/preference_setup/general/06_flavor.dm index aaee96959d..a35acfe8e9 100644 --- a/code/modules/client/preference_setup/general/06_flavor.dm +++ b/code/modules/client/preference_setup/general/06_flavor.dm @@ -59,12 +59,12 @@ switch(href_list["flavor_text"]) if("open") if("general") - var/msg = sanitize(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) //VOREStation Edit: separating out OOC notes - if(CanUseTopic(user)) + var/msg = sanitize(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) //VOREStation Edit: separating out OOC notes + if(CanUseTopic(user) && !isnull(msg)) pref.flavor_texts[href_list["flavor_text"]] = msg else - var/msg = sanitize(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]].","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) - if(CanUseTopic(user)) + var/msg = sanitize(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) + if(CanUseTopic(user) && !isnull(msg)) pref.flavor_texts[href_list["flavor_text"]] = msg SetFlavorText(user) return TOPIC_HANDLED @@ -73,12 +73,12 @@ switch(href_list["flavour_text_robot"]) if("open") if("Default") - var/msg = sanitize(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE), extra = 0) - if(CanUseTopic(user)) + var/msg = sanitize(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE), extra = 0) + if(CanUseTopic(user) && !isnull(msg)) pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg else - var/msg = sanitize(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this empty, default flavour text will be used for this module.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) - if(CanUseTopic(user)) + var/msg = sanitize(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) + if(CanUseTopic(user) && !isnull(msg)) pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg SetFlavourTextRobot(user) return TOPIC_HANDLED diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index 1808ff6c65..1ac55cbf9d 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -91,7 +91,7 @@ preference = list(preference) for(var/p in preference) var/datum/client_preference/cp = get_client_preference(p) - if(!cp || !(cp.key in prefs.preferences_enabled)) + if(!prefs || !cp || !(cp.key in prefs.preferences_enabled)) return FALSE return TRUE diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index bade14759f..a594492b7d 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -95,7 +95,7 @@ var/list/_client_preferences_by_type key = "DIGEST_NOISES" enabled_description = "Noisy" disabled_description = "Silent" - + /datum/client_preference/belch_noises // Belching noises - pref toggle for 'em description = "Burping" key = "BELCH_NOISES" @@ -301,6 +301,30 @@ var/list/_client_preferences_by_type enabled_description = "On" disabled_description = "Off" +/datum/client_preference/say_sounds + description = "Say Sounds" + key = "SAY_SOUNDS" + enabled_description = "On" + disabled_description = "Off" + +/datum/client_preference/emote_sounds + description = "Me Sounds" + key = "EMOTE_SOUNDS" + enabled_description = "On" + disabled_description = "Off" + +/datum/client_preference/whisper_sounds + description = "Whisper Sounds" + key = "WHISPER_SOUNDS" + enabled_description = "On" + disabled_description = "Off" + +/datum/client_preference/subtle_sounds + description = "Subtle Sounds" + key = "SUBTLE_SOUNDS" + enabled_description = "On" + disabled_description = "Off" + /datum/client_preference/runechat_mob description = "Runechat (Mobs)" key = "RUNECHAT_MOB" diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm index 079b05c4e6..208030ecee 100644 --- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm @@ -752,6 +752,12 @@ ckeywhitelist = list("pandora029") character_name = list("Evelyn Tareen", "Velyn Tareen") +/datum/gear/fluff/seona_flightsuit + path = /obj/item/clothing/under/fluff/foxoflightsuit/ + display_name = "padded flightsuit" + ckeywhitelist = list("pandora029") + character_name = list("Seona Young") + /datum/gear/fluff/lily_medal path = /obj/item/clothing/accessory/medal/silver/unity display_name = "Lily's Unity Medal" @@ -942,6 +948,13 @@ ckeywhitelist = list("seiga") character_name = list("Alfonso Oak Telanor") +/datum/gear/fluff/cerise_secbelt + path = /obj/item/weapon/storage/belt/security/fluff/cerise + display_name = "Cerise's Champion's Belt" + ckeywhitelist = list("shalax") + character_name = list("Cerise Duelliste") + allowed_roles = list("Security Officer", "Warden", "Head of Security", "Detective") + /datum/gear/fluff/nthasd_modkit //Converts a Security suit's sprite path = /obj/item/device/modkit_conversion/hasd display_name = "NT-HASD 556's Modkit" @@ -1286,7 +1299,13 @@ /datum/gear/fluff/nehi_radio path = /obj/item/device/radio/headset/fluff/zodiacshadow - display_name = "Nehi's Radio" + display_name = "Nehi's 'phones" + ckeywhitelist = list("zodiacshadow") + character_name = list("Nehi Maximus") + +/datum/gear/fluff/nehi_health_medal + path = /obj/item/clothing/accessory/medal/silver/fluff/zodiacshadow + display_name = "Health Service Achievement medal" ckeywhitelist = list("zodiacshadow") character_name = list("Nehi Maximus") @@ -1295,4 +1314,4 @@ display_name = "Lucky's amour" ckeywhitelist = list ("thedavestdave") character_name = list("Lucky") - allowed_roles = "Chaplain" \ No newline at end of file + allowed_roles = "Chaplain" diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index a6c9df400a..3041af9e90 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -627,7 +627,7 @@ /datum/gear/suit/cmddressjacket display_name = "command dress jacket" - path = /obj/item/clothing/suit/storage/cmddressjacket + path = /obj/item/clothing/suit/storage/toggle/cmddressjacket allowed_roles = list("Site Manager", "Head of Personnel", "Command Secretary") /datum/gear/suit/miscellaneous/kimono diff --git a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm index 417b1c5257..75697053aa 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm @@ -129,3 +129,17 @@ Talon winter coat /datum/gear/suit/russofurcoat display_name = "long fur coat" path = /obj/item/clothing/suit/storage/vest/hoscoat/russofurcoat + +//Colorable Hoodie + +/datum/gear/suit/hoodie_vr + display_name = "hoodie with hood (colorable)" + path = /obj/item/clothing/suit/storage/hooded/hoodie + +/datum/gear/suit/hoodie_vr/New() + var/list/hoodies = list() + for(var/hoodie_style in typesof(/obj/item/clothing/suit/storage/hooded/hoodie)) + var/obj/item/clothing/suit/storage/toggle/hoodie/hoodie = hoodie_style + hoodies[initial(hoodie.name)] = hoodie + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hoodies)) + gear_tweaks += gear_tweak_free_color_choice diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 04f90a8051..489973a92e 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -91,7 +91,7 @@ /datum/gear/uniform/pants/New() ..() var/list/pants = list() - for(var/obj/item/clothing/under/pants/pant_type as anything in typesof(/obj/item/clothing/under/pants)) + for(var/obj/item/clothing/under/pants/pant_type as anything in (typesof(/obj/item/clothing/under/pants) - typesof(/obj/item/clothing/under/pants/altevian))) pants[initial(pant_type.name)] = pant_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pants)) diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm index 41ebeafe1b..20f09a7fd8 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm @@ -36,7 +36,7 @@ /datum/gear/uniform/job_khi/med display_name = "ge uniform, med" //CHOMPedit: changed to GE suit path = /obj/item/clothing/under/rank/khi/med - allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Paramedic","Geneticist","Field Medic") + allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Paramedic","Geneticist","Field Medic","Psychiatrist") /datum/gear/uniform/job_khi/eng display_name = "ge uniform, eng" //CHOMPedit: changed to GE suit @@ -290,3 +290,38 @@ Talon jumpsuit display_name = "undersuit, command (SM/HoP)" allowed_roles = list("Site Manager", "Head of Personnel") path = /obj/item/clothing/under/undersuit/command + +//Altevian Uniforms +/datum/gear/uniform/job_altevian/cmd + display_name = "altevian uniform, cmd" + path = /obj/item/clothing/under/pants/altevian/command + allowed_roles = list("Head of Security","Site Manager","Head of Personnel","Chief Engineer","Research Director","Chief Medical Officer") + +/datum/gear/uniform/job_altevian/sec + display_name = "altevian uniform, sec" + path = /obj/item/clothing/under/pants/altevian/security + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") + +/datum/gear/uniform/job_altevian/med + display_name = "altevian uniform, med" + path = /obj/item/clothing/under/pants/altevian/medical + allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Paramedic","Geneticist","Field Medic","Psychiatrist") + +/datum/gear/uniform/job_altevian/eng + display_name = "altevian uniform, eng" + path = /obj/item/clothing/under/pants/altevian/engineering + allowed_roles = list("Chief Engineer","Atmospheric Technician","Engineer") + +/datum/gear/uniform/job_altevian/sci + display_name = "altevian uniform, sci" + path = /obj/item/clothing/under/pants/altevian/science + allowed_roles = list("Research Director", "Scientist", "Roboticist", "Xenobiologist", "Xenobotanist") + +/datum/gear/uniform/job_altevian/crg + display_name = "altevian uniform, cargo" + path = /obj/item/clothing/under/pants/altevian/cargo + allowed_roles = list("Quartermaster", "Cargo Technician", "Shaft Miner") + +/datum/gear/uniform/job_altevian/civ + display_name = "altevian uniform, civ" + path = /obj/item/clothing/under/pants/altevian diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index f4440117c4..17ee5ed672 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -232,6 +232,10 @@ return 1 . = OnTopic(href, href_list, usr) + + if(!pref_mob || !pref_mob.client) // Just in case we disappeared during OnTopic + return 1 + if(. & TOPIC_UPDATE_PREVIEW) pref_mob.client.prefs.update_preview_icon() if(. & TOPIC_REFRESH) diff --git a/code/modules/client/preference_setup/vore/02_size.dm b/code/modules/client/preference_setup/vore/02_size.dm index 37a71587b1..3a864d6135 100644 --- a/code/modules/client/preference_setup/vore/02_size.dm +++ b/code/modules/client/preference_setup/vore/02_size.dm @@ -3,6 +3,8 @@ #define WEIGHT_MAX 500 #define WEIGHT_CHANGE_MIN 0 #define WEIGHT_CHANGE_MAX 100 +#define MAX_VOICE_FREQ 70000 +#define MIN_VOICE_FREQ 15000 // Define a place to save in character setup /datum/preferences @@ -12,6 +14,8 @@ var/weight_gain = 100 // Weight gain rate. var/weight_loss = 50 // Weight loss rate. var/fuzzy = 0 // Preference toggle for sharp/fuzzy icon. Default sharp. + var/voice_freq = 42500 //CHOMPEdit - Why was the default 0 + var/voice_sound = "goon speak 1" //CHOMPEdit - Changed the default voice to one less jarring // Definition of the stuff for Sizing /datum/category_item/player_setup_item/vore/size @@ -24,6 +28,8 @@ S["weight_gain"] >> pref.weight_gain S["weight_loss"] >> pref.weight_loss S["fuzzy"] >> pref.fuzzy + S["voice_freq"] >> pref.voice_freq + S["voice_sound"] >> pref.voice_sound /datum/category_item/player_setup_item/vore/size/save_character(var/savefile/S) S["size_multiplier"] << pref.size_multiplier @@ -31,12 +37,17 @@ S["weight_gain"] << pref.weight_gain S["weight_loss"] << pref.weight_loss S["fuzzy"] << pref.fuzzy + S["voice_freq"] << pref.voice_freq + S["voice_sound"] << pref.voice_sound + /datum/category_item/player_setup_item/vore/size/sanitize_character() pref.weight_vr = sanitize_integer(pref.weight_vr, WEIGHT_MIN, WEIGHT_MAX, initial(pref.weight_vr)) pref.weight_gain = sanitize_integer(pref.weight_gain, WEIGHT_CHANGE_MIN, WEIGHT_CHANGE_MAX, initial(pref.weight_gain)) pref.weight_loss = sanitize_integer(pref.weight_loss, WEIGHT_CHANGE_MIN, WEIGHT_CHANGE_MAX, initial(pref.weight_loss)) pref.fuzzy = sanitize_integer(pref.fuzzy, 0, 1, initial(pref.fuzzy)) + if(pref.voice_freq != 0) + pref.voice_freq = sanitize_integer(pref.voice_freq, MIN_VOICE_FREQ, MAX_VOICE_FREQ, initial(pref.fuzzy)) if(pref.size_multiplier == null || pref.size_multiplier < RESIZE_TINY || pref.size_multiplier > RESIZE_HUGE) pref.size_multiplier = initial(pref.size_multiplier) @@ -45,12 +56,48 @@ character.weight_gain = pref.weight_gain character.weight_loss = pref.weight_loss character.fuzzy = pref.fuzzy + character.voice_freq = pref.voice_freq character.resize(pref.size_multiplier, animate = FALSE, ignore_prefs = TRUE) + if(!pref.voice_sound) + character.voice_sounds_list = talk_sound + else + switch(pref.voice_sound) + if("beep-boop") + character.voice_sounds_list = talk_sound + if("goon speak 1") + character.voice_sounds_list = goon_speak_one_sound + if("goon speak 2") + character.voice_sounds_list = goon_speak_two_sound + if("goon speak 3") + character.voice_sounds_list = goon_speak_three_sound + if("goon speak 4") + character.voice_sounds_list = goon_speak_four_sound + if("goon speak blub") + character.voice_sounds_list = goon_speak_blub_sound + if("goon speak bottalk") + character.voice_sounds_list = goon_speak_bottalk_sound + if("goon speak buwoo") + character.voice_sounds_list = goon_speak_buwoo_sound + if("goon speak cow") + character.voice_sounds_list = goon_speak_cow_sound + if("goon speak lizard") + character.voice_sounds_list = goon_speak_lizard_sound + if("goon speak pug") + character.voice_sounds_list = goon_speak_pug_sound + if("goon speak pugg") + character.voice_sounds_list = goon_speak_pugg_sound + if("goon speak roach") + character.voice_sounds_list = goon_speak_roach_sound + if("goon speak skelly") + character.voice_sounds_list = goon_speak_skelly_sound /datum/category_item/player_setup_item/vore/size/content(var/mob/user) . += "
    " . += "Scale: [round(pref.size_multiplier*100)]%
    " . += "Scaled Appearance: [pref.fuzzy ? "Fuzzy" : "Sharp"]
    " + . += "Voice Frequency: [pref.voice_freq]
    " + . += "Voice Sounds: [pref.voice_sound]
    " +// . += "Test Voice:
    " Maybe later . += "
    " . += "Relative Weight: [pref.weight_vr]
    " . += "Weight Gain Rate: [pref.weight_gain]
    " @@ -104,4 +151,47 @@ pref.weight_loss = round(text2num(weight_loss_rate),1) return TOPIC_REFRESH + else if(href_list["voice_freq"]) + var/list/preset_voice_freqs = list("high" = MAX_VOICE_FREQ, "middle-high" = 56250, "middle" = 42500, "middle-low"= 28750, "low" = MIN_VOICE_FREQ, "custom" = 1, "random" = 0) + var/choice = tgui_input_list(usr, "What would you like to set your voice frequency to? ([MIN_VOICE_FREQ] - [MAX_VOICE_FREQ])", "Voice Frequency", preset_voice_freqs) + if(!choice) + return + choice = preset_voice_freqs[choice] + if(choice == 0) + pref.voice_freq = choice + return TOPIC_REFRESH + else if(choice == 1) + choice = tgui_input_number(user, "Choose your character's voice frequency, ranging from [MIN_VOICE_FREQ] to [MAX_VOICE_FREQ]", "Custom Voice Frequency", null, MAX_VOICE_FREQ, MIN_VOICE_FREQ, round_value = TRUE) + if(choice > MAX_VOICE_FREQ) + choice = MAX_VOICE_FREQ + else if(choice < MIN_VOICE_FREQ) + choice = MIN_VOICE_FREQ + + pref.voice_freq = choice + return TOPIC_REFRESH + else if(href_list["voice_sounds_list"]) + var/list/possible_voice_types = list( + "beep-boop", + "goon speak 1", + "goon speak 2", + "goon speak 3", + "goon speak 4", + "goon speak blub", + "goon speak bottalk", + "goon speak buwoo", + "goon speak cow", + "goon speak lizard", + "goon speak pug", + "goon speak pugg", + "goon speak roach", + "goon speak skelly") + var/choice = tgui_input_list(usr, "Which set of sounds would you like to use for your character's speech sounds?", "Voice Sounds", possible_voice_types) + if(!choice) + pref.voice_sound = "goon speak 1" //CHOMPEdit - Defaults voice to a less jarring sound + else + pref.voice_sound = choice + /* Maybe later + else if(href_list["voice_test"]) + SEND_SOUND(user, sound(pick(voice_sounds_list), 50, frequency = pref.voice_freq)) + */ return ..(); diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 62b8cefe4b..ddd0ff612c 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -20,7 +20,7 @@ var/list/neg_traits = list() var/traits_cheating = 0 //Varedit by admins allows saving new maximums on people who apply/etc - var/starting_trait_points = STARTING_SPECIES_POINTS + var/starting_trait_points = 0 var/max_traits = MAX_SPECIES_TRAITS var/dirty_synth = 0 //Are you a synth var/gross_meatbag = 0 //Where'd I leave my Voight-Kampff test kit? @@ -72,7 +72,11 @@ pref.blood_color = sanitize_hexcolor(pref.blood_color, default="#A10808") if(!pref.traits_cheating) - pref.starting_trait_points = STARTING_SPECIES_POINTS + var/datum/species/S = GLOB.all_species[pref.species] + if(S) + pref.starting_trait_points = S.trait_points + else + pref.starting_trait_points = 0 pref.max_traits = MAX_SPECIES_TRAITS if(pref.organ_data[O_BRAIN]) //Checking if we have a synth on our hands, boys. @@ -82,14 +86,14 @@ pref.gross_meatbag = 1 pref.dirty_synth = 0 - if(pref.species != SPECIES_CUSTOM) - pref.pos_traits.Cut() - pref.neg_traits.Cut() // Clean up positive traits for(var/datum/trait/path as anything in pref.pos_traits) if(!(path in positive_traits)) pref.pos_traits -= path continue + if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_positive)) + pref.pos_traits -= path + continue var/take_flags = initial(path.can_take) if((pref.dirty_synth && !(take_flags & SYNTHETICS)) || (pref.gross_meatbag && !(take_flags & ORGANICS))) pref.pos_traits -= path @@ -98,7 +102,7 @@ if(!(path in neutral_traits)) pref.neu_traits -= path continue - if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits)) + if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_neutral)) pref.neu_traits -= path continue var/take_flags = initial(path.can_take) @@ -109,6 +113,9 @@ if(!(path in negative_traits)) pref.neg_traits -= path continue + if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_negative)) + pref.neg_traits -= path + continue var/take_flags = initial(path.can_take) if((pref.dirty_synth && !(take_flags & SYNTHETICS)) || (pref.gross_meatbag && !(take_flags & ORGANICS))) pref.neg_traits -= path @@ -141,6 +148,9 @@ var/datum/species/S = character.species var/datum/species/new_S = S.produceCopy(pref.pos_traits + pref.neu_traits + pref.neg_traits, character, pref.custom_base) + for(var/datum/trait/T in new_S.traits) + T.apply_pref(src) + //Any additional non-trait settings can be applied here new_S.blood_color = pref.blood_color @@ -151,8 +161,6 @@ //Statistics for this would be nice var/english_traits = english_list(new_S.traits, and_text = ";", comma_text = ";") log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet - else - /datum/category_item/player_setup_item/vore/traits/content(var/mob/user) . += "Custom Species Name: " @@ -164,38 +172,41 @@ . += "[pref.custom_base ? pref.custom_base : "Human"]
    " var/traits_left = pref.max_traits - - if(pref.species == SPECIES_CUSTOM) - var/points_left = pref.starting_trait_points - for(var/T in pref.pos_traits + pref.neg_traits) // CHOMPEdit: Only Positive traits cost slots now. - points_left -= traits_costs[T] - for(var/T in pref.pos_traits) - traits_left-- - . += "Traits Left: [traits_left]
    " - . += "Points Left: [points_left]
    " - if(points_left < 0 || traits_left < 0 || !pref.custom_species) - . += "^ Fix things! ^
    " - . += "Positive Trait(s) (Limited) +
    " // CHOMPEdit: More obvious/clear to players. - . += "" + var/points_left = pref.starting_trait_points + + + for(var/T in pref.pos_traits + pref.neg_traits) // CHOMPEdit: Only Positive traits cost slots now. + points_left -= traits_costs[T] + for(var/T in pref.pos_traits) + traits_left-- + . += "Traits Left: [traits_left]
    " + . += "Points Left: [points_left]
    " + if(points_left < 0 || traits_left < 0 || (!pref.custom_species && pref.species == SPECIES_CUSTOM)) + . += "^ Fix things! ^
    " + + . += "Positive Trait(s) (Limited) +
    " // CHOMPEdit: More obvious/clear to players. + . += "" - . += "Negative Trait(s) (No Limit) +
    " // CHOMPEdit: More obvious/clear to players. - . += "" . += "Neutral Trait(s) (No Limit) +
    " // CHOMPEdit: More obvious/clear to players. . += "" + + . += "Negative Trait(s) (No Limit) +
    " // CHOMPEdit: More obvious/clear to players. + . += "" + . += "Blood Color: " //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color. . += "Set Color" . += "R
    " @@ -251,13 +262,12 @@ return TOPIC_REFRESH else if(href_list["clicked_pos_trait"]) - var/traitpath = text2path(href_list["clicked_pos_trait"]) //CHOMPEdit var/datum/trait/trait = text2path(href_list["clicked_pos_trait"]) var/choice = tgui_alert(usr, "Remove [initial(trait.name)] and regain [initial(trait.cost)] points?","Remove Trait",list("Remove","Cancel")) if(choice == "Remove") - if(traitpath == /datum/trait/positive/linguist) //CHOMPEdit - pref.num_languages = null //CHOMPEdit pref.pos_traits -= trait + var/datum/trait/instance = all_traits[trait] + instance.remove_pref(pref) return TOPIC_REFRESH else if(href_list["clicked_neu_trait"]) @@ -265,6 +275,8 @@ var/choice = tgui_alert(usr, "Remove [initial(trait.name)]?","Remove Trait",list("Remove","Cancel")) if(choice == "Remove") pref.neu_traits -= trait + var/datum/trait/instance = all_traits[trait] + instance.remove_pref(pref) return TOPIC_REFRESH else if(href_list["clicked_neg_trait"]) @@ -272,6 +284,8 @@ var/choice = tgui_alert(usr, "Remove [initial(trait.name)] and lose [initial(trait.cost)] points?","Remove Trait",list("Remove","Cancel")) if(choice == "Remove") pref.neg_traits -= trait + var/datum/trait/instance = all_traits[trait] + instance.remove_pref(pref) return TOPIC_REFRESH else if(href_list["custom_say"]) @@ -328,18 +342,26 @@ var/list/mylist switch(mode) if(POSITIVE_MODE) - picklist = positive_traits.Copy() - pref.pos_traits - mylist = pref.pos_traits + if(pref.species == SPECIES_CUSTOM) + picklist = positive_traits.Copy() - pref.pos_traits + mylist = pref.pos_traits + else + picklist = everyone_traits_positive.Copy() - pref.pos_traits + mylist = pref.pos_traits if(NEUTRAL_MODE) if(pref.species == SPECIES_CUSTOM) picklist = neutral_traits.Copy() - pref.neu_traits mylist = pref.neu_traits else - picklist = everyone_traits.Copy() - pref.neu_traits + picklist = everyone_traits_neutral.Copy() - pref.neu_traits mylist = pref.neu_traits if(NEGATIVE_MODE) - picklist = negative_traits.Copy() - pref.neg_traits - mylist = pref.neg_traits + if(pref.species == SPECIES_CUSTOM) + picklist = negative_traits.Copy() - pref.neg_traits + mylist = pref.neg_traits + else + picklist = everyone_traits_negative.Copy() - pref.neg_traits + mylist = pref.neg_traits else if(isnull(picklist)) @@ -424,11 +446,16 @@ conflict = instance_test.name break varconflict + for(var/V in instance.var_changes_pref) + if(V in instance_test.var_changes_pref) + conflict = instance_test.name + break varconflict + if(conflict) tgui_alert_async(usr, "You cannot take this trait and [conflict] at the same time. Please remove that trait, or pick another trait to add.", "Error") return TOPIC_REFRESH - if(path==/datum/trait/positive/linguist) //CHOMPEdit - pref.num_languages = 12 //CHOMPEdit + + instance.apply_pref(pref) mylist += path return TOPIC_REFRESH diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index c06d0ab35d..b4a63bea83 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -33,7 +33,6 @@ var/list/preferences_datums = list() var/tgui_swapped_buttons = FALSE //character preferences - var/num_languages = 0 //CHOMPEdit var/real_name //our character's name var/be_random_name = 0 //whether we are a random name every round var/nickname //our character's nickname @@ -164,12 +163,6 @@ var/list/preferences_datums = list() ///If they are currently in the process of swapping slots, don't let them open 999 windows for it and get confused var/selecting_slots = FALSE -//CHOMPEdit Begin -/datum/preferences/proc/numlanguage() - var/datum/species/S = GLOB.all_species[species] - var/num = max(num_languages, S.num_alternate_languages) - return (num == 0) ? 3 : num //Don't return 0 -//CHOMPEdit End /datum/preferences/New(client/C) player_setup = new(src) diff --git a/code/modules/client/preferences_toggle_procs.dm b/code/modules/client/preferences_toggle_procs.dm index c4b02a91eb..6df855d1eb 100644 --- a/code/modules/client/preferences_toggle_procs.dm +++ b/code/modules/client/preferences_toggle_procs.dm @@ -406,6 +406,61 @@ feedback_add_details("admin_verb","TRadioSounds") +/client/verb/toggle_say_sounds() + set name = "Toggle Voice Sounds" //CHOMPEdit - changed name to one that doesn't interfere with say autofill + set category = "Preferences" + set desc = "Toggle hearing a sound when somebody speaks or emotes." + + var/pref_path = /datum/client_preference/say_sounds + toggle_preference(pref_path) + SScharacter_setup.queue_preferences_save(prefs) + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/say_sounds)) ? "hear" : "not hear"] say sounds.") + + feedback_add_details("admin_verb","TSaySounds") +/* +CHOMPRemove. Bundled voice sounds into emote/whisper/subtle. Going this extra length to babyproof prefs wasn't necessary and got in the way of quick whisper/say autofill. + +/client/verb/toggle_emote_sounds() + set name = "Sound-Toggle-Me" + set category = "Preferences" + set desc = "Toggle hearing a sound when somebody speaks using me ." + + var/pref_path = /datum/client_preference/emote_sounds + toggle_preference(pref_path) + SScharacter_setup.queue_preferences_save(prefs) + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/emote_sounds)) ? "hear" : "not hear"] me sounds.") + + feedback_add_details("admin_verb","TMeSounds") + +/client/verb/toggle_whisper_sounds() + set name = "Sound-Toggle-Whisper" + set category = "Preferences" + set desc = "Toggle hearing a sound when somebody speaks using whisper." + + var/pref_path = /datum/client_preference/whisper_sounds + toggle_preference(pref_path) + SScharacter_setup.queue_preferences_save(prefs) + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/whisper_sounds)) ? "hear" : "not hear"] whisper sounds.") + + feedback_add_details("admin_verb","TWhisperSounds") + +/client/verb/toggle_subtle_sounds() + set name = "Sound-Toggle-Subtle" + set category = "Preferences" + set desc = "Toggle hearing a sound when somebody uses subtle." + + var/pref_path = /datum/client_preference/subtle_sounds + toggle_preference(pref_path) + SScharacter_setup.queue_preferences_save(prefs) + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/subtle_sounds)) ? "hear" : "not hear"] subtle sounds.") + + feedback_add_details("admin_verb","TSubtleSounds") +*/ + // Not attached to a pref datum because those are strict binary toggles /client/verb/toggle_examine_mode() set name = "Toggle Examine Mode" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 935a121a5e..508187a0a4 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -786,7 +786,7 @@ var/image/standing = ..() if(taurized) //Special snowflake var on suits standing.pixel_x = -16 - standing.layer = BODY_LAYER + 15 // 15 is above tail layer, so will not be covered by taurbody. + standing.layer = BODY_LAYER + 16 // 16 is above tail layer, so will not be covered by taurbody. return standing /obj/item/clothing/suit/apply_accessories(var/image/standing) diff --git a/code/modules/clothing/clothing_vr.dm b/code/modules/clothing/clothing_vr.dm index 084e1b577d..fe3f99c947 100644 --- a/code/modules/clothing/clothing_vr.dm +++ b/code/modules/clothing/clothing_vr.dm @@ -35,6 +35,8 @@ if(istype(I,/obj/item/weapon/holder/micro)) var/full = 0 for(var/mob/M in src) + if(istype(M,/mob/living/voice)) //Don't count voices as people! + continue full++ if(full >= 2) to_chat(user, "You can't fit anyone else into \the [src]!") @@ -51,6 +53,8 @@ /obj/item/clothing/shoes/attack_self(var/mob/user) for(var/mob/M in src) + if(istype(M,/mob/living/voice)) //Don't knock voices out! + continue M.forceMove(get_turf(user)) to_chat(M, "[user] shakes you out of \the [src]!") to_chat(user, "You shake [M] out of \the [src]!") @@ -59,6 +63,8 @@ /obj/item/clothing/shoes/container_resist(mob/living/micro) var/mob/living/carbon/human/macro = loc + if(istype(micro,/mob/living/voice)) //Voices shouldn't be able to resist but we have this here just in case. + return if(!istype(macro)) to_chat(micro, "You start to climb out of [src]!") if(do_after(micro, 50, src)) @@ -106,14 +112,20 @@ spawn(100) recent_struggle = 0 - if(ishuman(src.loc)) + if(ishuman(src.loc)) //Is this on a person? var/mob/living/carbon/human/H = src.loc - if(H.shoes == src) + if(istype(user,/mob/living/voice)) //Is this a possessed item? Spooky. It can move on it's own! + to_chat(H, "The [src] shifts about, almost as if squirming!") + to_chat(user, "You cause the [src] to shift against [H]'s form! Well, what little you can get to, given your current state!") + else if(H.shoes == src) to_chat(H, "[user]'s tiny body presses against you in \the [src], squirming!") to_chat(user, "Your body presses out against [H]'s form! Well, what little you can get to!") else to_chat(H, "[user]'s form shifts around in the \the [src], squirming!") to_chat(user, "You move around inside the [src], to no avail.") + else if(istype(user,/mob/living/voice)) //Possessed! + src.visible_message("The [src] shifts about!") + to_chat(user, "You cause the [src] to shift about!") else src.visible_message("\The [src] moves a little!") to_chat(user, "You throw yourself against the inside of \the [src]!") diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 8d7ec44f54..fb5c2ffecd 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -92,7 +92,12 @@ icon_state = "work" item_state = "wgloves" armor = list(melee = 10, bullet = 10, laser = 10, energy = 5, bomb = 0, bio = 0, rad = 0) - +// CHOMPEdit Start - If they resist lasers and energy they should help inulate against heat and cold. + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE +// CHOMPEdit End /obj/item/clothing/gloves/tactical desc = "These brown tactical gloves are made from a durable synthetic, and have hardened knuckles." name = "tactical gloves" @@ -172,5 +177,3 @@ name = "water wings" desc = "Swim aids designed to help a wearer float in water and learn to swim." icon_state = "waterwings" - - diff --git a/code/modules/clothing/head/hood.dm b/code/modules/clothing/head/hood.dm index 8f7f752ee0..4243b0fa27 100644 --- a/code/modules/clothing/head/hood.dm +++ b/code/modules/clothing/head/hood.dm @@ -203,9 +203,16 @@ name = "techpriest hood" desc = "A techpriest hood." icon_state = "techpriesthood" - + /obj/item/clothing/head/hood/siffet_hood name = "siffet hood" desc = "A hood that looks vaguely like a siffet's head. Guaranteed to traumatize your Promethean coworkers." icon_state = "siffet" item_state_slots = list(slot_r_hand_str = "siffet", slot_l_hand_str = "siffet") + +/obj/item/clothing/head/hood/hoodie + name = "hood" + desc = "The hood of a hoodie. Cosy!" + icon = 'icons/inventory/head/item_vr.dmi' + icon_override = 'icons/inventory/head/mob_vr.dmi' + icon_state = "hood_plain" diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 6c2ae7f179..0a0b64862e 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -178,7 +178,7 @@ for(var/obj/item/piece in list(helmet,gloves,chest,boots)) if(!piece || piece.loc != wearer) continue - . += "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed." + . += "\icon[piece][bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed." if(src.loc == usr) . += "The access panel is [locked? "locked" : "unlocked"]." diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm b/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm index b6c60d88aa..545cf34845 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm @@ -12,7 +12,8 @@ SPECIES_FENNEC = 'icons/inventory/head/mob_vr_vulpkanin.dmi', SPECIES_PROMETHEAN = 'icons/inventory/head/mob_skrell.dmi', SPECIES_VOX = 'icons/inventory/head/mob_vox.dmi', - SPECIES_TESHARI = 'icons/inventory/head/mob_teshari.dmi' + SPECIES_TESHARI = 'icons/inventory/head/mob_teshari.dmi', + SPECIES_ALTEVIAN = 'icons/inventory/head/mob_vr_altevian.dmi' ) /obj/item/clothing/suit/space/rig @@ -29,23 +30,24 @@ SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi', SPECIES_PROMETHEAN = 'icons/inventory/suit/mob_skrell.dmi', SPECIES_VOX = 'icons/inventory/suit/mob_vox.dmi', - SPECIES_TESHARI = 'icons/inventory/suit/mob_teshari.dmi' + SPECIES_TESHARI = 'icons/inventory/suit/mob_teshari.dmi', + SPECIES_ALTEVIAN = 'icons/inventory/suit/mob_vr_altevian.dmi' ) /obj/item/clothing/head/helmet/space/rig - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_GREY_YW/*ywedit*/) + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_ALTEVIAN, SPECIES_GREY_YW/*ywedit*/) flags = PHORONGUARD //YAWN Edit /obj/item/clothing/gloves/gauntlets/rig - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_GREY_YW/*ywedit*/) + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_ALTEVIAN, SPECIES_GREY_YW/*ywedit*/) flags = PHORONGUARD //YAWN Edit /obj/item/clothing/shoes/magboots/rig - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_GREY_YW/*ywedit*/) + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_ALTEVIAN, SPECIES_GREY_YW/*ywedit*/) flags = PHORONGUARD //YAWN Edit /obj/item/clothing/suit/space/rig - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_FENNEC, SPECIES_XENOHYBRID, SPECIES_GREY_YW/*ywedit*/) + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_FENNEC, SPECIES_XENOHYBRID, SPECIES_ALTEVIAN, SPECIES_GREY_YW/*ywedit*/) /obj/item/clothing/shoes/magboots/rig/ce name = "advanced boots" diff --git a/code/modules/clothing/spacesuits/rig/suits/alien.dm b/code/modules/clothing/spacesuits/rig/suits/alien.dm index 895a14be17..aa909d1ca2 100644 --- a/code/modules/clothing/spacesuits/rig/suits/alien.dm +++ b/code/modules/clothing/spacesuits/rig/suits/alien.dm @@ -147,7 +147,7 @@ req_access = list() req_one_access = list() - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage) //CHOMP Edit offline_vision_restriction = 1 initial_modules = list( diff --git a/code/modules/clothing/spacesuits/void/ert_vr.dm b/code/modules/clothing/spacesuits/void/ert_vr.dm index 0393b4ecf7..2f10083694 100644 --- a/code/modules/clothing/spacesuits/void/ert_vr.dm +++ b/code/modules/clothing/spacesuits/void/ert_vr.dm @@ -6,7 +6,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100) slowdown = 0.5 siemens_coefficient = 0.5 - species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI) //this thing can autoadapt + species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI,SPECIES_ALTEVIAN) //this thing can autoadapt icon = 'icons/inventory/suit/item_vr.dmi' default_worn_icon = 'icons/inventory/suit/mob_vr.dmi' w_class = ITEMSIZE_NORMAL //the mark vii packs itself down when not in use, thanks future-materials @@ -107,7 +107,7 @@ desc = "As a vital part of the Mark VII suit, the integral helmet cannot be removed - so don't try." icon_state = "erthelmet" item_state = "erthelmet" - species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI) //this thing can autoadapt too + species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI,SPECIES_ALTEVIAN) //this thing can autoadapt too armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100) siemens_coefficient = 0.5 icon = 'icons/inventory/head/item_vr.dmi' diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index ec0b54befa..74827589ba 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -513,14 +513,17 @@ |ACCESSORY_SLOT_ARMOR_A\ |ACCESSORY_SLOT_ARMOR_L\ |ACCESSORY_SLOT_ARMOR_S\ - |ACCESSORY_SLOT_ARMOR_M) + |ACCESSORY_SLOT_ARMOR_M\ + |ACCESSORY_SLOT_OVER\ + |ACCESSORY_SLOT_ARMBAND) //CHOMPEdit - let pcarriers have fashion restricted_accessory_slots = (\ ACCESSORY_SLOT_INSIGNIA\ |ACCESSORY_SLOT_ARMOR_C\ |ACCESSORY_SLOT_ARMOR_A\ |ACCESSORY_SLOT_ARMOR_L\ |ACCESSORY_SLOT_ARMOR_S\ - |ACCESSORY_SLOT_ARMOR_M) + |ACCESSORY_SLOT_ARMOR_M\ + |ACCESSORY_SLOT_ARMBAND) //CHOMPEdit - let pcarriers have fashion blood_overlay_type = "armor" /obj/item/clothing/suit/armor/pcarrier/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = FALSE) @@ -639,4 +642,4 @@ starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/bulletproof, /obj/item/clothing/accessory/armor/armguards/bulletproof, /obj/item/clothing/accessory/armor/legguards/bulletproof, /obj/item/clothing/accessory/storage/pouches) /obj/item/clothing/suit/armor/pcarrier/riot/full - starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/riot, /obj/item/clothing/accessory/armor/armguards/riot, /obj/item/clothing/accessory/armor/legguards/riot, /obj/item/clothing/accessory/storage/pouches) \ No newline at end of file + starting_accessories = list(/obj/item/clothing/accessory/armor/armorplate/riot, /obj/item/clothing/accessory/armor/armguards/riot, /obj/item/clothing/accessory/armor/legguards/riot, /obj/item/clothing/accessory/storage/pouches) diff --git a/code/modules/clothing/suits/hooded.dm b/code/modules/clothing/suits/hooded.dm index 89470f7e8b..fb6ab3f64b 100644 --- a/code/modules/clothing/suits/hooded.dm +++ b/code/modules/clothing/suits/hooded.dm @@ -60,6 +60,8 @@ hood.canremove = FALSE icon_state = "[toggleicon]_t" H.update_inv_wear_suit() + if(color != hood.color) + hood.color = color else RemoveHood() @@ -139,7 +141,7 @@ allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/weapon/gun/energy, /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton, - /obj/item/weapon/handcuffs, /obj/item/clothing/head/helmet) + /obj/item/weapon/handcuffs, /obj/item/clothing/head/helmet, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/security/hos name = "head of security's winter coat" @@ -150,7 +152,7 @@ allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/weapon/gun/energy, /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton, - /obj/item/weapon/handcuffs, /obj/item/clothing/head/helmet) + /obj/item/weapon/handcuffs, /obj/item/clothing/head/helmet, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/medical name = "medical winter coat" @@ -163,7 +165,7 @@ /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/weapon/dnainjector, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, - /obj/item/weapon/reagent_containers/pill, /obj/item/weapon/storage/pill_bottle) + /obj/item/weapon/reagent_containers/pill, /obj/item/weapon/storage/pill_bottle, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt name = "medical winter coat, alt" @@ -210,7 +212,7 @@ /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/weapon/dnainjector, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, - /obj/item/weapon/reagent_containers/pill, /obj/item/weapon/storage/pill_bottle) + /obj/item/weapon/reagent_containers/pill, /obj/item/weapon/storage/pill_bottle, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/science name = "science winter coat" @@ -249,7 +251,7 @@ allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner, /obj/item/weapon/tool/crowbar, /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/weapon/tank/emergency/oxygen, /obj/item/clothing/mask/gas, /obj/item/taperoll/engineering) + /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/weapon/tank/emergency/oxygen, /obj/item/clothing/mask/gas, /obj/item/taperoll/engineering, /obj/item/clothing/head/hardhat) //please engineers take your hardhat with you I beg of you /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos name = "atmospherics winter coat" @@ -300,7 +302,7 @@ hoodtype = /obj/item/clothing/head/hood/winter/cargo/miner allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, - /obj/item/weapon/tank, /obj/item/device/radio, /obj/item/weapon/pickaxe, /obj/item/weapon/storage/bag/ore) + /obj/item/weapon/tank, /obj/item/device/radio, /obj/item/weapon/pickaxe, /obj/item/weapon/storage/bag/ore, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/bar name = "bartender winter coat" diff --git a/code/modules/clothing/suits/hooded_vr.dm b/code/modules/clothing/suits/hooded_vr.dm index cb279936aa..4b79a4e3c0 100644 --- a/code/modules/clothing/suits/hooded_vr.dm +++ b/code/modules/clothing/suits/hooded_vr.dm @@ -78,3 +78,45 @@ icon_state = "taloncoat" armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) hoodtype = /obj/item/clothing/head/hood/winter/talon + +//Functional hoodie + +/obj/item/clothing/suit/storage/hooded/hoodie + name = "hoodie" + desc = "A warm jacket, now featuring a hood!" + icon = 'icons/inventory/suit/item_vr.dmi' + icon_override = 'icons/inventory/suit/mob_vr.dmi' + icon_state = "hoodie_plain" + item_state_slots = list(slot_r_hand_str = "grey_hoodie", slot_l_hand_str = "grey_hoodie") + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + flags_inv = HIDEHOLSTER + cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE + hoodtype = /obj/item/clothing/head/hood/hoodie + allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, + /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit) + +/obj/item/clothing/suit/storage/hooded/hoodie/redtrim + name = "red-trimmed hoodie" + desc = "A warm jacket, now featuring a hood and a bold red trim!" + icon_state = "hoodie_redtrim" + +/obj/item/clothing/suit/storage/hooded/hoodie/bluetrim + name = "blue-trimmed hoodie" + desc = "A warm jacket, now featuring a hood and a cool blue trim!" + icon_state = "hoodie_bluetrim" + +/obj/item/clothing/suit/storage/hooded/hoodie/greentrim + name = "green-trimmed hoodie" + desc = "A warm jacket, now featuring a hood and a chilled green trim!" + icon_state = "hoodie_greentrim" + +/obj/item/clothing/suit/storage/hooded/hoodie/purpletrim + name = "purple-trimmed hoodie" + desc = "A warm jacket, now featuring a hood and a smart purple trim!" + icon_state = "hoodie_purpletrim" + +/obj/item/clothing/suit/storage/hooded/hoodie/yellowtrim + name = "yellow-trimmed hoodie" + desc = "A warm jacket, now featuring a hood and an eye-catching yellow trim!" + icon_state = "hoodie_yellowtrim" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 17b265ed9f..d2ba4b26d9 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -35,7 +35,7 @@ flags_inv = HIDEHOLSTER //Command -/obj/item/clothing/suit/storage/cmddressjacket +/obj/item/clothing/suit/storage/toggle/cmddressjacket name = "command dress jacket" desc = "A fancy dress jacket made for command staff. Makes you feel in charge." icon_state = "cmddressjacket" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 18c399efbc..5d0c531c5c 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -6,7 +6,7 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS flags_inv = HIDEHOLSTER - allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper) + allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper, /obj/item/clothing/mask/gas) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) /obj/item/clothing/suit/storage/toggle/labcoat/red diff --git a/code/modules/clothing/under/accessories/altevian_vr.dm b/code/modules/clothing/under/accessories/altevian_vr.dm new file mode 100644 index 0000000000..ec3322d185 --- /dev/null +++ b/code/modules/clothing/under/accessories/altevian_vr.dm @@ -0,0 +1,78 @@ +/obj/item/clothing/accessory/jacket/altevian + name = "Altevian Hegemony Civilian Jacket" + desc = "A form fitting jacket that looks more for fashion than for work with it leaving ones mid-riff exposed to the outside elements, but when looking so good it isn't really ones worry by that point! " + icon = 'icons/inventory/accessory/item_vr.dmi' + icon_override = 'icons/inventory/accessory/mob_vr.dmi' + icon_state = "altevian-jacket-civ" + item_state = "altevian-jacket-civ" + overlay_state = "altevian-jacket-civ" + +/obj/item/clothing/accessory/jacket/altevian/command + name = "Altevian Hegemony Command Jacket" + icon_state = "altevian-jacket-com" + item_state = "altevian-jacket-com" + overlay_state = "altevian-jacket-com" + +/obj/item/clothing/accessory/jacket/altevian/security + name = "Altevian Hegemony Security Jacket" + icon_state = "altevian-jacket-sec" + item_state = "altevian-jacket-sec" + overlay_state = "altevian-jacket-sec" + +/obj/item/clothing/accessory/jacket/altevian/medical + name = "Altevian Hegemony Command Jacket" + icon_state = "altevian-jacket-med" + item_state = "altevian-jacket-med" + overlay_state = "altevian-jacket-med" + +/obj/item/clothing/accessory/jacket/altevian/engineering + name = "Altevian Hegemony Engineering Jacket" + icon_state = "altevian-jacket-eng" + item_state = "altevian-jacket-eng" + overlay_state = "altevian-jacket-eng" + +/obj/item/clothing/accessory/jacket/altevian/science + name = "Altevian Hegemony Science Jacket" + icon_state = "altevian-jacket-sci" + item_state = "altevian-jacket-sci" + overlay_state = "altevian-jacket-sci" + +/obj/item/clothing/accessory/jacket/altevian/cargo + name = "Altevian Hegemony Cargo Jacket" + icon_state = "altevian-jacket-cargo" + item_state = "altevian-jacket-cargo" + overlay_state = "altevian-jacket-cargo" + + +/obj/item/clothing/accessory/scarf/altevian + name = "Blue Comfortable Scarf" + desc = "A scarf made of synthetic material that would be common among a people who don't really have the leisure of organic crops for luxury goods. They seemed to of refined this process though and one wouldn't be able to tell the difference between it and ones made normally." + icon = 'icons/inventory/accessory/item_vr.dmi' + icon_override = 'icons/inventory/accessory/mob_vr.dmi' + icon_state = "altevian-scarf-blue" + item_state = "altevian-scarf-blue" + overlay_state = "altevian-scarf-blue" + +/obj/item/clothing/accessory/scarf/altevian/red + name = "Red Comfortable Scarf" + icon_state = "altevian-scarf-red" + item_state = "altevian-scarf-red" + overlay_state = "altevian-scarf-red" + +/obj/item/clothing/accessory/scarf/altevian/yellow + name = "Yellow Comfortable Scarf" + icon_state = "altevian-scarf-yellow" + item_state = "altevian-scarf-yellow" + overlay_state = "altevian-scarf-yellow" + +/obj/item/clothing/accessory/scarf/altevian/green + name = "Green Comfortable Scarf" + icon_state = "altevian-scarf-green" + item_state = "altevian-scarf-green" + overlay_state = "altevian-scarf-green" + +/obj/item/clothing/accessory/scarf/altevian/purple + name = "Purple Comfortable Scarf" + icon_state = "altevian-scarf-purple" + item_state = "altevian-scarf-purple" + overlay_state = "altevian-scarf-purple" \ No newline at end of file diff --git a/code/modules/clothing/under/altevian_vr.dm b/code/modules/clothing/under/altevian_vr.dm new file mode 100644 index 0000000000..51f3bbef3b --- /dev/null +++ b/code/modules/clothing/under/altevian_vr.dm @@ -0,0 +1,46 @@ +/obj/item/clothing/under/pants/altevian + name = "Altevian Hegemony Civilian Pants" + desc = "An extremely comfortable set of clothing that's made to help people handle their day to day work around the fleets with little to no discomfort." + icon = 'icons/inventory/uniform/item_vr.dmi' + icon_override = 'icons/inventory/uniform/mob_vr.dmi' + icon_state = "altevian-pants-civ" + worn_state = "altevian-pants-civ" + gender = PLURAL + body_parts_covered = LOWER_TORSO|LEGS + starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian) + +/obj/item/clothing/under/pants/altevian/command + name = "Altevian Hegemony Command Pants" + icon_state = "altevian-pants-com" + worn_state = "altevian-pants-com" + starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/command) + +/obj/item/clothing/under/pants/altevian/security + name = "Altevian Hegemony Security Pants" + icon_state = "altevian-pants-sec" + worn_state = "altevian-pants-sec" + starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/security) + +/obj/item/clothing/under/pants/altevian/engineering + name = "Altevian Hegemony Engineering Pants" + icon_state = "altevian-pants-eng" + worn_state = "altevian-pants-eng" + starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/engineering) + +/obj/item/clothing/under/pants/altevian/medical + name = "Altevian Hegemony Medical Pants" + icon_state = "altevian-pants-med" + worn_state = "altevian-pants-med" + starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/medical) + +/obj/item/clothing/under/pants/altevian/science + name = "Altevian Hegemony Science Pants" + icon_state = "altevian-pants-sci" + worn_state = "altevian-pants-sci" + starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/science) + +/obj/item/clothing/under/pants/altevian/cargo + name = "Altevian Hegemony Cargo Pants" + icon_state = "altevian-pants-cargo" + worn_state = "altevian-pants-cargo" + starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/cargo) diff --git a/code/modules/clothing/under/miscellaneous_vr.dm b/code/modules/clothing/under/miscellaneous_vr.dm index e52df06471..ef719641c9 100644 --- a/code/modules/clothing/under/miscellaneous_vr.dm +++ b/code/modules/clothing/under/miscellaneous_vr.dm @@ -109,7 +109,7 @@ /obj/item/clothing/under/hyperfiber/bluespace/mob_can_unequip(mob/M, slot, disable_warning = 0) . = ..() - if(. && ishuman(M) && original_size) + if(. && ishuman(M) && original_size && !disable_warning) var/mob/living/carbon/human/H = M H.resize(original_size, ignore_prefs = TRUE) original_size = null @@ -129,7 +129,7 @@ /obj/item/clothing/gloves/bluespace/mob_can_equip(mob/M, gloves, disable_warning = 0) . = ..() - if(. && ishuman(M)) + if(. && ishuman(M) && !disable_warning) var/mob/living/carbon/human/H = M if(!H.resizable) return @@ -145,7 +145,7 @@ /obj/item/clothing/gloves/bluespace/mob_can_unequip(mob/M, gloves, disable_warning = 0) . = ..() - if(. && ishuman(M) && original_size) + if(. && ishuman(M) && original_size && !disable_warning) var/mob/living/carbon/human/H = M if(!H.resizable) return diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm index 1017e74df8..ba8f247443 100644 --- a/code/modules/detectivework/microscope/dnascanner.dm +++ b/code/modules/detectivework/microscope/dnascanner.dm @@ -105,7 +105,7 @@ last_process_worldtime = world.time /obj/machinery/dnaforensics/proc/complete_scan() - visible_message("[bicon(src)] makes an insistent chime.", 2) + visible_message("\icon[src][bicon(src)] makes an insistent chime.", 2) update_icon() if(bloodsamp) var/obj/item/weapon/paper/P = new(src) diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 2eef935e81..aae9a23515 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -76,7 +76,7 @@ log transactions //display a message to the user var/response = pick("Initiating withdraw. Have a nice day!", "CRITICAL ERROR: Activating cash chamber panic siphon.","PIN Code accepted! Emptying account balance.", "Jackpot!") - to_chat(user, "[bicon(src)] The [src] beeps: \"[response]\"") + to_chat(user, "\icon[src][bicon(src)] The [src] beeps: \"[response]\"") return 1 /obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob) @@ -85,7 +85,7 @@ log transactions if(istype(I, /obj/item/weapon/card)) if(emagged > 0) //prevent inserting id into an emagged ATM - to_chat(user, "[bicon(src)] CARD READER ERROR. This system has been compromised!") + to_chat(user, "\icon[src][bicon(src)] CARD READER ERROR. This system has been compromised!") return else if(istype(I,/obj/item/weapon/card/emag)) I.resolve_attackby(src, user) @@ -234,7 +234,7 @@ log transactions var/target_account_number = text2num(href_list["target_acc_number"]) var/transfer_purpose = href_list["purpose"] if(charge_to_account(target_account_number, authenticated_account.owner_name, transfer_purpose, machine_id, transfer_amount)) - to_chat(usr, "[bicon(src)]Funds transfer successful.") + to_chat(usr, "\icon[src][bicon(src)]Funds transfer successful.") authenticated_account.money -= transfer_amount //create an entry in the account transaction log @@ -247,10 +247,10 @@ log transactions T.amount = "([transfer_amount])" authenticated_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]Funds transfer failed.") + to_chat(usr, "\icon[src][bicon(src)]Funds transfer failed.") else - to_chat(usr, "[bicon(src)]You don't have enough funds to do that!") + to_chat(usr, "\icon[src][bicon(src)]You don't have enough funds to do that!") if("view_screen") view_screen = text2num(href_list["view_screen"]) if("change_security_level") @@ -288,11 +288,11 @@ log transactions T.time = stationtime2text() failed_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.") + to_chat(usr, "\icon[src][bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.") previous_account_number = tried_account_num playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) else - to_chat(usr, "[bicon(src)] incorrect pin/account combination entered.") + to_chat(usr, "\icon[src][bicon(src)] incorrect pin/account combination entered.") number_incorrect_tries = 0 else playsound(src, 'sound/machines/twobeep.ogg', 50, 1) @@ -308,7 +308,7 @@ log transactions T.time = stationtime2text() authenticated_account.transaction_log.Add(T) - to_chat(usr, "[bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'") + to_chat(usr, "\icon[src][bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'") previous_account_number = tried_account_num if("e_withdrawal") @@ -336,7 +336,7 @@ log transactions T.time = stationtime2text() authenticated_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]You don't have enough funds to do that!") + to_chat(usr, "\icon[src][bicon(src)]You don't have enough funds to do that!") if("withdrawal") var/amount = max(text2num(href_list["funds_amount"]),0) amount = round(amount, 0.01) @@ -361,7 +361,7 @@ log transactions T.time = stationtime2text() authenticated_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]You don't have enough funds to do that!") + to_chat(usr, "\icon[src][bicon(src)]You don't have enough funds to do that!") if("balance_statement") if(authenticated_account) var/obj/item/weapon/paper/R = new(src.loc) @@ -433,7 +433,7 @@ log transactions if(!held_card) //this might happen if the user had the browser window open when somebody emagged it if(emagged > 0) - to_chat(usr, "[bicon(src)] The ATM card reader rejected your ID because this machine has been sabotaged!") + to_chat(usr, "\icon[src][bicon(src)] The ATM card reader rejected your ID because this machine has been sabotaged!") else var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card/id)) diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index beae04ee7c..3673f67814 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -107,7 +107,7 @@ if(linked_account) scan_card(I, O) else - to_chat(usr, "[bicon(src)]Unable to connect to linked account.") + to_chat(usr, "\icon[src][bicon(src)]Unable to connect to linked account.") else if (istype(O, /obj/item/weapon/spacecash/ewallet)) var/obj/item/weapon/spacecash/ewallet/E = O if (linked_account) @@ -115,7 +115,7 @@ if(transaction_locked && !transaction_paid) if(transaction_amount <= E.worth) playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("[bicon(src)] \The [src] chimes.") + src.visible_message("\icon[src][bicon(src)] \The [src] chimes.") transaction_paid = 1 //transfer the money @@ -132,11 +132,11 @@ T.time = stationtime2text() linked_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]\The [O] doesn't have that much money!") + to_chat(usr, "\icon[src][bicon(src)]\The [O] doesn't have that much money!") else - to_chat(usr, "[bicon(src)]Connected account has been suspended.") + to_chat(usr, "\icon[src][bicon(src)]Connected account has been suspended.") else - to_chat(usr, "[bicon(src)]EFTPOS is not connected to an account.") + to_chat(usr, "\icon[src][bicon(src)]EFTPOS is not connected to an account.") else ..() @@ -154,14 +154,14 @@ tgui_alert_async(usr, "That is not a valid code!") print_reference() else - to_chat(usr, "[bicon(src)]Incorrect code entered.") + to_chat(usr, "\icon[src][bicon(src)]Incorrect code entered.") if("change_id") var/attempt_code = text2num(input(usr, "Re-enter the current EFTPOS access code", "Confirm EFTPOS code")) if(attempt_code == access_code) eftpos_name = sanitize(input(usr, "Enter a new terminal ID for this device", "Enter new EFTPOS ID"), MAX_NAME_LEN) + " EFTPOS scanner" print_reference() else - to_chat(usr, "[bicon(src)]Incorrect code entered.") + to_chat(usr, "\icon[src][bicon(src)]Incorrect code entered.") if("link_account") var/attempt_account_num = tgui_input_number(usr, "Enter account number to pay EFTPOS charges into", "New account number") var/attempt_pin = tgui_input_number(usr, "Enter pin code", "Account pin") @@ -169,9 +169,9 @@ if(linked_account) if(linked_account.suspended) linked_account = null - to_chat(usr, "[bicon(src)]Account has been suspended.") + to_chat(usr, "\icon[src][bicon(src)]Account has been suspended.") else - to_chat(usr, "[bicon(src)]Account not found.") + to_chat(usr, "\icon[src][bicon(src)]Account not found.") if("trans_purpose") var/choice = sanitize(input(usr, "Enter reason for EFTPOS transaction", "Transaction purpose")) if(choice) transaction_purpose = choice @@ -194,14 +194,14 @@ else if(linked_account) transaction_locked = 1 else - to_chat(usr, "[bicon(src)]No account connected to send transactions to.") + to_chat(usr, "\icon[src][bicon(src)]No account connected to send transactions to.") if("scan_card") if(linked_account) var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card)) scan_card(I) else - to_chat(usr, "[bicon(src)]Unable to link accounts.") + to_chat(usr, "\icon[src][bicon(src)]Unable to link accounts.") if("reset") //reset the access code - requires HoP/captain access var/obj/item/I = usr.get_active_hand() @@ -209,10 +209,10 @@ var/obj/item/weapon/card/id/C = I if((access_cent_captain in C.access) || (access_hop in C.access) || (access_captain in C.access)) access_code = 0 - to_chat(usr, "[bicon(src)]Access code reset to 0.") + to_chat(usr, "\icon[src][bicon(src)]Access code reset to 0.") else if (istype(I, /obj/item/weapon/card/emag)) access_code = 0 - to_chat(usr, "[bicon(src)]Access code reset to 0.") + to_chat(usr, "\icon[src][bicon(src)]Access code reset to 0.") src.attack_self(usr) @@ -236,7 +236,7 @@ if(!D.suspended) if(transaction_amount <= D.money) playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("[bicon(src)] \The [src] chimes.") + src.visible_message("\icon[src][bicon(src)] \The [src] chimes.") transaction_paid = 1 //transfer the money @@ -265,25 +265,25 @@ T.time = stationtime2text() linked_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]You don't have that much money!") + to_chat(usr, "\icon[src][bicon(src)]You don't have that much money!") else - to_chat(usr, "[bicon(src)]Your account has been suspended.") + to_chat(usr, "\icon[src][bicon(src)]Your account has been suspended.") else - to_chat(usr, "[bicon(src)]Unable to access account. Check security settings and try again.") + to_chat(usr, "\icon[src][bicon(src)]Unable to access account. Check security settings and try again.") else - to_chat(usr, "[bicon(src)]Connected account has been suspended.") + to_chat(usr, "\icon[src][bicon(src)]Connected account has been suspended.") else - to_chat(usr, "[bicon(src)]EFTPOS is not connected to an account.") + to_chat(usr, "\icon[src][bicon(src)]EFTPOS is not connected to an account.") else if (istype(I, /obj/item/weapon/card/emag)) if(transaction_locked) if(transaction_paid) - to_chat(usr, "[bicon(src)]You stealthily swipe \the [I] through \the [src].") + to_chat(usr, "\icon[src][bicon(src)]You stealthily swipe \the [I] through \the [src].") transaction_locked = 0 transaction_paid = 0 else usr.visible_message("\The [usr] swipes a card through \the [src].") playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("[bicon(src)] \The [src] chimes.") + src.visible_message("\icon[src][bicon(src)] \The [src] chimes.") transaction_paid = 1 //emag? diff --git a/code/modules/economy/cash_register.dm b/code/modules/economy/cash_register.dm index 08d4ab66d8..ae649a8f4d 100644 --- a/code/modules/economy/cash_register.dm +++ b/code/modules/economy/cash_register.dm @@ -103,7 +103,7 @@ if(allowed(usr)) locked = !locked else - to_chat(usr, "[bicon(src)]Insufficient access.") + to_chat(usr, "\icon[src][bicon(src)]Insufficient access.") if("toggle_cash_lock") cash_locked = !cash_locked if("link_account") @@ -113,9 +113,9 @@ if(linked_account) if(linked_account.suspended) linked_account = null - src.visible_message("[bicon(src)]Account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Account has been suspended.") else - to_chat(usr, "[bicon(src)]Account not found.") + to_chat(usr, "\icon[src][bicon(src)]Account not found.") if("custom_order") var/t_purpose = sanitize(tgui_input_text(usr, "Enter purpose", "New purpose")) if (!t_purpose || !Adjacent(usr)) return @@ -126,7 +126,7 @@ transaction_amount += t_amount price_list += t_amount playsound(src, 'sound/machines/twobeep.ogg', 25) - src.visible_message("[bicon(src)][transaction_purpose]: [t_amount] Thaler\s.") + src.visible_message("\icon[src][bicon(src)][transaction_purpose]: [t_amount] Thaler\s.") if("set_amount") var/item_name = locate(href_list["item"]) var/n_amount = round(tgui_input_number(usr, "Enter amount", "New amount")) @@ -163,7 +163,7 @@ price_list.Cut() if("reset_log") transaction_logs.Cut() - to_chat(usr, "[bicon(src)]Transaction log reset.") + to_chat(usr, "\icon[src][bicon(src)]Transaction log reset.") updateDialog() @@ -208,7 +208,7 @@ return 1 else confirm_item = I - src.visible_message("[bicon(src)]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") + src.visible_message("\icon[src][bicon(src)]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") playsound(src, 'sound/machines/twobeep.ogg', 25) return 0 @@ -219,14 +219,14 @@ if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[bicon(src)]The cash box is open.") + to_chat(usr, "\icon[src][bicon(src)]The cash box is open.") return if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(I)) return if (!linked_account) - usr.visible_message("[bicon(src)]Unable to connect to linked account.") + usr.visible_message("\icon[src][bicon(src)]Unable to connect to linked account.") return // Access account for transaction @@ -239,13 +239,13 @@ D = attempt_account_access(I.associated_account_number, attempt_pin, 2) if(!D) - src.visible_message("[bicon(src)]Unable to access account. Check security settings and try again.") + src.visible_message("\icon[src][bicon(src)]Unable to access account. Check security settings and try again.") else if(D.suspended) - src.visible_message("[bicon(src)]Your account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Your account has been suspended.") else if(transaction_amount > D.money) - src.visible_message("[bicon(src)]Not enough funds.") + src.visible_message("\icon[src][bicon(src)]Not enough funds.") else // Transfer the money D.money -= transaction_amount @@ -284,7 +284,7 @@ if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[bicon(src)]The cash box is open.") + to_chat(usr, "\icon[src][bicon(src)]The cash box is open.") return if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(E)) @@ -293,7 +293,7 @@ // Access account for transaction if(check_account()) if(transaction_amount > E.worth) - src.visible_message("[bicon(src)]Not enough funds.") + src.visible_message("\icon[src][bicon(src)]Not enough funds.") else // Transfer the money E.worth -= transaction_amount @@ -322,14 +322,14 @@ if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[bicon(src)]The cash box is open.") + to_chat(usr, "\icon[src][bicon(src)]The cash box is open.") return if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(SC)) return if(transaction_amount > SC.worth) - src.visible_message("[bicon(src)]Not enough money.") + src.visible_message("\icon[src][bicon(src)]Not enough money.") else // Insert cash into magical slot SC.worth -= transaction_amount @@ -351,20 +351,20 @@ /obj/machinery/cash_register/proc/scan_item_price(obj/O) if(!istype(O)) return if(item_list.len > 10) - src.visible_message("[bicon(src)]Only up to ten different items allowed per purchase.") + src.visible_message("\icon[src][bicon(src)]Only up to ten different items allowed per purchase.") return if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[bicon(src)]The cash box is open.") + to_chat(usr, "\icon[src][bicon(src)]The cash box is open.") return // First check if item has a valid price var/price = O.get_item_cost() if(isnull(price)) - src.visible_message("[bicon(src)]Unable to find item in database.") + src.visible_message("\icon[src][bicon(src)]Unable to find item in database.") return // Call out item cost - src.visible_message("[bicon(src)]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") + src.visible_message("\icon[src][bicon(src)]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") // Note the transaction purpose for later use if(transaction_purpose) transaction_purpose += "
    " @@ -432,11 +432,11 @@ /obj/machinery/cash_register/proc/check_account() if (!linked_account) - usr.visible_message("[bicon(src)]Unable to connect to linked account.") + usr.visible_message("\icon[src][bicon(src)]Unable to connect to linked account.") return 0 if(linked_account.suspended) - src.visible_message("[bicon(src)]Connected account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Connected account has been suspended.") return 0 return 1 @@ -444,7 +444,7 @@ /obj/machinery/cash_register/proc/transaction_complete() /// Visible confirmation playsound(src, 'sound/machines/chime.ogg', 25) - src.visible_message("[bicon(src)]Transaction complete.") + src.visible_message("\icon[src][bicon(src)]Transaction complete.") flick("register_approve", src) reset_memory() updateDialog() diff --git a/code/modules/economy/retail_scanner.dm b/code/modules/economy/retail_scanner.dm index d9755b5041..f2b4854d11 100644 --- a/code/modules/economy/retail_scanner.dm +++ b/code/modules/economy/retail_scanner.dm @@ -99,7 +99,7 @@ if(allowed(usr)) locked = !locked else - to_chat(usr, "[bicon(src)]Insufficient access.") + to_chat(usr, "\icon[src][bicon(src)]Insufficient access.") if("link_account") var/attempt_account_num = tgui_input_number(usr, "Enter account number", "New account number") var/attempt_pin = tgui_input_number(usr, "Enter PIN", "Account PIN") @@ -107,9 +107,9 @@ if(linked_account) if(linked_account.suspended) linked_account = null - src.visible_message("[bicon(src)]Account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Account has been suspended.") else - to_chat(usr, "[bicon(src)]Account not found.") + to_chat(usr, "\icon[src][bicon(src)]Account not found.") if("custom_order") var/t_purpose = sanitize(tgui_input_text(usr, "Enter purpose", "New purpose")) if (!t_purpose || !Adjacent(usr)) return @@ -120,7 +120,7 @@ transaction_amount += t_amount price_list += t_amount playsound(src, 'sound/machines/twobeep.ogg', 25) - src.visible_message("[bicon(src)][transaction_purpose]: [t_amount] Thaler\s.") + src.visible_message("\icon[src][bicon(src)][transaction_purpose]: [t_amount] Thaler\s.") if("set_amount") var/item_name = locate(href_list["item"]) var/n_amount = round(tgui_input_number(usr, "Enter amount", "New amount")) @@ -157,7 +157,7 @@ price_list.Cut() if("reset_log") transaction_logs.Cut() - to_chat(usr, "[bicon(src)]Transaction log reset.") + to_chat(usr, "\icon[src][bicon(src)]Transaction log reset.") updateDialog() @@ -190,7 +190,7 @@ return 1 else confirm_item = I - src.visible_message("[bicon(src)]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") + src.visible_message("\icon[src][bicon(src)]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") playsound(src, 'sound/machines/twobeep.ogg', 25) return 0 @@ -203,7 +203,7 @@ return if (!linked_account) - usr.visible_message("[bicon(src)]Unable to connect to linked account.") + usr.visible_message("\icon[src][bicon(src)]Unable to connect to linked account.") return // Access account for transaction @@ -216,13 +216,13 @@ D = attempt_account_access(I.associated_account_number, attempt_pin, 2) if(!D) - src.visible_message("[bicon(src)]Unable to access account. Check security settings and try again.") + src.visible_message("\icon[src][bicon(src)]Unable to access account. Check security settings and try again.") else if(D.suspended) - src.visible_message("[bicon(src)]Your account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Your account has been suspended.") else if(transaction_amount > D.money) - src.visible_message("[bicon(src)]Not enough funds.") + src.visible_message("\icon[src][bicon(src)]Not enough funds.") else // Transfer the money D.money -= transaction_amount @@ -265,7 +265,7 @@ // Access account for transaction if(check_account()) if(transaction_amount > E.worth) - src.visible_message("[bicon(src)]Not enough funds.") + src.visible_message("\icon[src][bicon(src)]Not enough funds.") else // Transfer the money E.worth -= transaction_amount @@ -291,16 +291,16 @@ /obj/item/device/retail_scanner/proc/scan_item_price(var/obj/O) if(!istype(O)) return if(item_list.len > 10) - src.visible_message("[bicon(src)]Only up to ten different items allowed per purchase.") + src.visible_message("\icon[src][bicon(src)]Only up to ten different items allowed per purchase.") return // First check if item has a valid price var/price = O.get_item_cost() if(isnull(price)) - src.visible_message("[bicon(src)]Unable to find item in database.") + src.visible_message("\icon[src][bicon(src)]Unable to find item in database.") return // Call out item cost - src.visible_message("[bicon(src)]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") + src.visible_message("\icon[src][bicon(src)]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") // Note the transaction purpose for later use if(transaction_purpose) transaction_purpose += "
    " @@ -368,11 +368,11 @@ /obj/item/device/retail_scanner/proc/check_account() if (!linked_account) - usr.visible_message("[bicon(src)]Unable to connect to linked account.") + usr.visible_message("\icon[src][bicon(src)]Unable to connect to linked account.") return 0 if(linked_account.suspended) - src.visible_message("[bicon(src)]Connected account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Connected account has been suspended.") return 0 return 1 @@ -380,7 +380,7 @@ /obj/item/device/retail_scanner/proc/transaction_complete() /// Visible confirmation playsound(src, 'sound/machines/chime.ogg', 25) - src.visible_message("[bicon(src)]Transaction complete.") + src.visible_message("\icon[src][bicon(src)]Transaction complete.") flick("retail_approve", src) reset_memory() updateDialog() diff --git a/code/modules/economy/vending.dm b/code/modules/economy/vending.dm index 55c726539a..c05c3e1a69 100644 --- a/code/modules/economy/vending.dm +++ b/code/modules/economy/vending.dm @@ -270,7 +270,7 @@ GLOBAL_LIST_EMPTY(vending_products) // This is not a status display message, since it's something the character // themselves is meant to see BEFORE putting the money in - to_chat(usr, "[bicon(cashmoney)] That is not enough money.") + to_chat(usr, "\icon[cashmoney][bicon(cashmoney)] That is not enough money.") return 0 if(istype(cashmoney, /obj/item/weapon/spacecash)) diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index bd79cb1f7b..1984cc8154 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -194,7 +194,8 @@ /obj/item/weapon/reagent_containers/food/snacks/cb10 = 6, /obj/item/weapon/reagent_containers/food/snacks/tuna = 2) contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6, - /obj/item/weapon/reagent_containers/food/snacks/unajerky = 12) + /obj/item/weapon/reagent_containers/food/snacks/unajerky = 12, + /obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax = 6) prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 1, /obj/item/weapon/reagent_containers/food/snacks/candy/gummy = 2, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 5, @@ -1067,7 +1068,8 @@ /obj/item/weapon/reagent_containers/food/snacks/driedfish = 8, /obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 8 ) - contraband = list(/obj/item/weapon/reagent_containers/food/snacks/unajerky = 1) + contraband = list(/obj/item/weapon/reagent_containers/food/snacks/unajerky = 1, + /obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red = 6) prices = list( /obj/item/weapon/reagent_containers/food/snacks/tuna = 5, /obj/item/weapon/reagent_containers/food/snacks/semki = 5, diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm index 53bc3b71ad..56f7e92b31 100644 --- a/code/modules/economy/vending_machines_vr.dm +++ b/code/modules/economy/vending_machines_vr.dm @@ -635,7 +635,15 @@ /obj/item/clothing/mask/bandana/gold = 5, /obj/item/clothing/mask/bandana/green = 5, /obj/item/clothing/mask/bandana/red = 5, - /obj/item/clothing/mask/surgical = 5) + /obj/item/clothing/mask/surgical = 5, + /obj/item/clothing/accessory/pride/bi = 5, + /obj/item/clothing/accessory/pride/trans = 5, + /obj/item/clothing/accessory/pride/ace = 5, + /obj/item/clothing/accessory/pride/enby = 5, + /obj/item/clothing/accessory/pride/pan = 5, + /obj/item/clothing/accessory/pride/lesbian = 5, + /obj/item/clothing/accessory/pride/intersex = 5, + /obj/item/clothing/accessory/pride/vore = 5) prices = list(/obj/item/clothing/accessory = 50, /obj/item/clothing/accessory/armband/med/color = 50, /obj/item/clothing/accessory/asymmetric = 50, @@ -752,7 +760,15 @@ /obj/item/clothing/mask/bandana/gold = 50, /obj/item/clothing/mask/bandana/green = 50, /obj/item/clothing/mask/bandana/red = 50, - /obj/item/clothing/mask/surgical = 50) + /obj/item/clothing/mask/surgical = 50, + /obj/item/clothing/accessory/pride/bi = 50, + /obj/item/clothing/accessory/pride/trans = 50, + /obj/item/clothing/accessory/pride/ace = 50, + /obj/item/clothing/accessory/pride/enby = 50, + /obj/item/clothing/accessory/pride/pan = 50, + /obj/item/clothing/accessory/pride/lesbian = 50, + /obj/item/clothing/accessory/pride/intersex = 50, + /obj/item/clothing/accessory/pride/vore = 50) premium = list(/obj/item/weapon/bedsheet/rainbow = 1) contraband = list(/obj/item/clothing/mask/gas/clown_hat = 1, /obj/item/clothing/accessory/collar/collarplanet_earth = 5) @@ -1225,7 +1241,9 @@ /obj/item/weapon/pack/spaceball = 10, /obj/item/weapon/storage/pill_bottle/dice = 5, /obj/item/weapon/storage/pill_bottle/dice_nerd = 5, - /obj/item/weapon/melee/umbrella/random = 10) + /obj/item/weapon/melee/umbrella/random = 10, + /obj/item/weapon/deck/schnapsen = 5, + /obj/item/weapon/deck/egy = 5) prices = list(/obj/item/weapon/cane = 100, /obj/item/weapon/pack/cardemon = 100, /obj/item/weapon/deck/holder = 100, @@ -1236,7 +1254,9 @@ /obj/item/weapon/pack/spaceball = 100, /obj/item/weapon/storage/pill_bottle/dice = 100, /obj/item/weapon/storage/pill_bottle/dice_nerd = 100, - /obj/item/weapon/melee/umbrella/random = 100) + /obj/item/weapon/melee/umbrella/random = 100, + /obj/item/weapon/deck/schnapsen = 100, + /obj/item/weapon/deck/egy = 100) premium = list(/obj/item/toy/bosunwhistle = 1) contraband = list(/obj/item/toy/katana = 1) @@ -2527,7 +2547,7 @@ desc = "Food made by dogs!" product_ads = "EAT FOOD!!!;Awooooooooooooooo!~;Made by actual dogs!;Now with twenty percent more taste!!!" icon = 'icons/obj/vending.dmi' - icon_state = "fridge_food" + icon_state = "hotfood" products = list(/obj/item/weapon/tray = 50, /obj/item/weapon/material/kitchen/utensil/fork = 50, /obj/item/weapon/material/knife/plastic = 50, @@ -3015,7 +3035,7 @@ desc = "Food made by dogs!" product_ads = "EAT FOOD!!!;Awooooooooooooooo!~;Made by actual dogs!;Now with twenty percent more taste!!!" icon = 'icons/obj/vending.dmi' - icon_state = "fridge_food" + icon_state = "hotfood" products = list(/obj/item/weapon/tray = 50, /obj/item/weapon/material/kitchen/utensil/fork = 50, /obj/item/weapon/material/knife/plastic = 50, @@ -3411,7 +3431,7 @@ desc = "Food made by dogs!" product_ads = "EAT FOOD!!!;Awooooooooooooooo!~;Made by actual dogs!;Now with twenty percent more taste!!!" icon = 'icons/obj/vending.dmi' - icon_state = "fridge_food" + icon_state = "hotfood" products = list(/obj/item/weapon/reagent_containers/food/snacks/bearmeat = 10, /obj/item/weapon/reagent_containers/food/snacks/carpmeat = 10, /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish = 10, diff --git a/code/modules/emotes/definitions/audible_furry_vr.dm b/code/modules/emotes/definitions/audible_furry_vr.dm index f2118f1030..385759bc8d 100644 --- a/code/modules/emotes/definitions/audible_furry_vr.dm +++ b/code/modules/emotes/definitions/audible_furry_vr.dm @@ -144,6 +144,21 @@ key = "squeaky" emote_message_3p = "squeaks." emote_sound = 'sound/items/drop/plushie.ogg' +/decl/emote/audible/mothscream + key = "mothscream" + emote_message_3p ="screams" + emote_sound = 'sound/voice/moth/scream_moth.ogg' + +/decl/emote/audible/mothchitter + key = "mothchitter" + emote_message_3p = "chitters" + emote_sound = 'sound/voice/moth/moth_chitter.ogg' + +/decl/emote/audible/mothlaugh + key = "mothlaugh" + emote_message_3p = "laughs" + emote_sound = 'sound/voice/moth/moth_laugh.ogg' + /decl/emote/audible/gyoh key = "gyoh" @@ -193,23 +208,23 @@ key = "coyawoo" emote_message_3p = "lets out a scraggly awoo." emote_sound = 'sound/voice/coyoteawoo.ogg' - + /decl/emote/audible/coyawoo2 key = "coyawoo2" emote_message_3p = "lets out a pronounced, scraggly awoo." emote_sound = 'sound/voice/coyoteawoo2.ogg' - + /decl/emote/audible/coyawoo3 key = "coyawoo3" emote_message_3p = "yaps and lets out a scraggly awoo." emote_sound = 'sound/voice/coyoteawoo3.ogg' - + /decl/emote/audible/coyawoo4 key = "coyawoo4" emote_message_3p = "yaps several times, and lets out a short, scraggly awoo." emote_sound = 'sound/voice/coyoteawoo4.ogg' - + /decl/emote/audible/coyawoo5 key = "coyawoo5" emote_message_3p = "lets out a scraggly, whine-awoo." - emote_sound = 'sound/voice/coyoteawoo5.ogg' \ No newline at end of file + emote_sound = 'sound/voice/coyoteawoo5.ogg' diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 03e30b0189..226e4d9630 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -191,10 +191,23 @@ if(message) message = encode_html_emphasis(message) + /* CHOMPRemove - Not needed if you set your defaults right + var/ourfreq = null + if(isliving(src)) + var/mob/living/L = src + if(L.voice_freq > 0 ) + ourfreq = L.voice_freq + */ + + // Hearing gasp and such every five seconds is not good emotes were not global for a reason. // Maybe some people are okay with that. var/turf/T = get_turf(src) + if(!T) return + + if(client) + playsound(T, pick(voice_sounds_list), 75, TRUE, falloff = 1 , is_global = TRUE, frequency = voice_freq, ignore_walls = FALSE, preference = /datum/client_preference/say_sounds) //CHOMPEdit - use say prefs instead var/list/in_range = get_mobs_and_objs_in_view_fast(T,range,2,remote_ghosts = client ? TRUE : FALSE) var/list/m_viewers = in_range["mobs"] var/list/o_viewers = in_range["objs"] diff --git a/code/modules/events/grubinfestation_vr.dm b/code/modules/events/grubinfestation_vr.dm index e31aa9a51b..d9dd5291dd 100644 --- a/code/modules/events/grubinfestation_vr.dm +++ b/code/modules/events/grubinfestation_vr.dm @@ -11,9 +11,8 @@ spawncount = rand(2 * severity, 6 * severity) for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) - //CHOMPEdit: Added a couple areas to the exclusion. Also made this actually work. - var/in_area = get_area(temp_vent) - if(istype(in_area, /area/crew_quarters/sleep) || istype(in_area, /area/hallway/secondary/entry)) + var/area/A = get_area(temp_vent) + if(A.forbid_events) continue if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change in order to spawn. @@ -25,7 +24,8 @@ /datum/event/grub_infestation/start() while((spawncount >= 1) && vents.len) var/obj/vent = pick(vents) - new /mob/living/simple_mob/animal/solargrub_larva(get_turf(vent)) + var/mob/living/simple_mob/animal/solargrub_larva/larva = new(get_turf(vent)) + larva.tracked = TRUE vents -= vent spawncount-- vents.Cut() @@ -35,6 +35,14 @@ for(var/mob/living/G as anything in existing_solargrubs) if(!G || G.stat == DEAD) continue + if(istype(G, /mob/living/simple_mob/animal/solargrub_larva)) + var/mob/living/simple_mob/animal/solargrub_larva/L = G + if(!(L.tracked)) + continue + if(istype(G, /mob/living/simple_mob/vore/solargrub)) + var/mob/living/simple_mob/vore/solargrub/S = G + if(!(S.tracked)) + continue var/area/grub_area = get_area(G) if(!grub_area) //Huh, really? if(!get_turf(G)) //No turf either? diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm index ba588742dd..a5ca92b650 100644 --- a/code/modules/events/spider_infestation.dm +++ b/code/modules/events/spider_infestation.dm @@ -22,8 +22,10 @@ if(istype(in_area, /area/crew_quarters/sleep) || istype(in_area, /area/hallway/secondary/entry)) continue if(!temp_vent.welded && temp_vent.network && (temp_vent.loc.z in using_map.station_levels)) - if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change in order to spawn. - vents += temp_vent + if(temp_vent.network.normal_members.len > 10) //CHOMP Edit: Most our networks are 40. SM is 4 and toxins is 2. This needed to change to 10 from 50 in order for spawns to work. + var/area/A = get_area(temp_vent) + if(!(A.forbid_events)) + vents += temp_vent while((spawncount >= 1) && vents.len) var/obj/vent = pick(vents) diff --git a/code/modules/food/food/drinks.dm b/code/modules/food/food/drinks.dm index c30f5053cf..8a9e434669 100644 --- a/code/modules/food/food/drinks.dm +++ b/code/modules/food/food/drinks.dm @@ -23,18 +23,18 @@ price_tag = null return -/obj/item/weapon/reagent_containers/food/drinks/proc/On_Consume(var/mob/M) - if(!usr) - usr = M - if(!reagents.total_volume) +/obj/item/weapon/reagent_containers/food/drinks/proc/On_Consume(var/mob/M, var/mob/user, var/changed = FALSE) + if(!user) + user = M + if(!reagents.total_volume && changed) M.visible_message("[M] finishes drinking \the [src].","You finish drinking \the [src].") if(trash) - usr.drop_from_inventory(src) //so icons update :[ + user.drop_from_inventory(src) //so icons update :[ if(ispath(trash,/obj/item)) - var/obj/item/TrashItem = new trash(usr) - usr.put_in_hands(TrashItem) + var/obj/item/TrashItem = new trash(user) + user.put_in_hands(TrashItem) else if(istype(trash,/obj/item)) - usr.put_in_hands(trash) + user.put_in_hands(trash) qdel(src) return @@ -73,8 +73,11 @@ if(!is_open_container()) to_chat(user, "You need to open [src]!") return 1 - On_Consume(target,user) - return ..() + var/original_volume = reagents.total_volume + .=..() + var/changed = !(reagents.total_volume == original_volume) + On_Consume(target,user,changed) + return /obj/item/weapon/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target) if(!is_open_container()) diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index bdade9c50b..11d7a172dc 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -3984,8 +3984,7 @@ /obj/item/weapon/reagent_containers/food/snacks/rawcutlet/Initialize() . = ..() - reagents.add_reagent("fishbait", 9) - reagents.add_reagent("protein", 3) + reagents.add_reagent("protein", 1) /obj/item/weapon/reagent_containers/food/snacks/cutlet name = "cutlet" @@ -3997,8 +3996,7 @@ /obj/item/weapon/reagent_containers/food/snacks/cutlet/Initialize() . = ..() - reagents.add_reagent("fishbait", 15) - reagents.add_reagent("protein", 5) + reagents.add_reagent("protein", 2) /obj/item/weapon/reagent_containers/food/snacks/rawmeatball name = "raw meatball" @@ -4010,8 +4008,7 @@ /obj/item/weapon/reagent_containers/food/snacks/rawmeatball/Initialize() . = ..() - reagents.add_reagent("fishbait", 30) - reagents.add_reagent("protein", 10) + reagents.add_reagent("protein", 2) /obj/item/weapon/reagent_containers/food/snacks/hotdog name = "hotdog" @@ -4448,7 +4445,8 @@ /obj/item/weapon/reagent_containers/food/snacks/wormsickly/Initialize() . = ..() - reagents.add_reagent("fishbait", 10) + reagents.add_reagent("fishbait", 9) + reagents.add_reagent("protein", 3) /obj/item/weapon/reagent_containers/food/snacks/worm name = "strange worm" @@ -4461,7 +4459,8 @@ /obj/item/weapon/reagent_containers/food/snacks/worm/Initialize() . = ..() - reagents.add_reagent("fishbait", 20) + reagents.add_reagent("fishbait", 15) + reagents.add_reagent("protein", 5) /obj/item/weapon/reagent_containers/food/snacks/wormdeluxe name = "deluxe worm" @@ -4474,7 +4473,8 @@ /obj/item/weapon/reagent_containers/food/snacks/wormdeluxe/Initialize() . = ..() - reagents.add_reagent("fishbait", 40) + reagents.add_reagent("fishbait", 30) + reagents.add_reagent("protein", 10) /obj/item/weapon/reagent_containers/food/snacks/siffruit name = "pulsing fruit" @@ -6900,6 +6900,7 @@ /obj/item/weapon/reagent_containers/food/snacks/appleberry/Initialize() . = ..() reagents.add_reagent("milk", 8) + reagents.add_reagent("sugar", 5) /obj/item/weapon/reagent_containers/food/snacks/canned/ntbeans name = "baked beans" @@ -6928,10 +6929,11 @@ filling_color = "#caa3c9" center_of_mass = list("x"=15, "y"=9) bitesize = 2 + var/brainmeat = "brain_protein" /obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/Initialize() . = ..() - reagents.add_reagent("brain_protein", 10) + reagents.add_reagent(brainmeat, 10) /obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red name = "\improper BrainzSnax RED" @@ -6945,10 +6947,7 @@ filling_color = "#a6898d" center_of_mass = list("x"=15, "y"=9) bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red/Initialize() - . = ..() - reagents.add_reagent("red_brain_protein", 10) + brainmeat = "red_brain_protein" //////////////Packaged Food - break open and eat////////////// diff --git a/code/modules/food/food/z_custom_food_vr.dm b/code/modules/food/food/z_custom_food_vr.dm index c72718c7ba..3ca9b4fa9a 100644 --- a/code/modules/food/food/z_custom_food_vr.dm +++ b/code/modules/food/food/z_custom_food_vr.dm @@ -49,7 +49,7 @@ var/global/ingredientLimit = 20000 I.forceMove(src) if(S.reagents) - S.reagents.trans_to(src,S.reagents.total_volume) + S.reagents.trans_to_holder(reagents,S.reagents.total_volume) ingredients += S @@ -142,7 +142,7 @@ var/global/ingredientLimit = 20000 /obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/attackby(obj/item/I,mob/user) if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/slice/bread) && !addTop) - I.reagents.trans_to(src,I.reagents.total_volume) + I.reagents.trans_to_holder(reagents,I.reagents.total_volume) qdel(I) addTop = 1 src.drawTopping() diff --git a/code/modules/food/kitchen/icecream.dm b/code/modules/food/kitchen/icecream.dm index 7dd64d3574..e92bd32254 100644 --- a/code/modules/food/kitchen/icecream.dm +++ b/code/modules/food/kitchen/icecream.dm @@ -92,7 +92,7 @@ var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = O if(!I.ice_creamed) if(product_types[dispense_flavour] > 0) - src.visible_message("[bicon(src)] [user] scoops delicious [flavour_name] icecream into [I].") + src.visible_message("\icon[src][bicon(src)] [user] scoops delicious [flavour_name] icecream into [I].") product_types[dispense_flavour] -= 1 I.add_ice_cream(flavour_name) // if(beaker) diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index 48e2942323..3f0cbafe43 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -336,6 +336,7 @@ spawn(30) for(var/obj/effect/landmark/L in linkedholodeck) + L.delete_me = 1 if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 1856b4ce84..b54b661ce5 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -419,8 +419,8 @@ set_trait(TRAIT_POTENCY,rand(5,30),200,0) set_trait(TRAIT_PRODUCT_ICON,pick(SSplants.accessible_product_sprites)) set_trait(TRAIT_PLANT_ICON,pick(SSplants.accessible_plant_sprites)) - set_trait(TRAIT_PLANT_COLOUR,"#[get_random_colour(0,75,190)]") - set_trait(TRAIT_PRODUCT_COLOUR,"#[get_random_colour(0,75,190)]") + set_trait(TRAIT_PLANT_COLOUR,get_random_colour(0,75,190)) + set_trait(TRAIT_PRODUCT_COLOUR,get_random_colour(0,75,190)) update_growth_stages() if(prob(20)) @@ -548,7 +548,7 @@ if(prob(5)) set_trait(TRAIT_BIOLUM,1) - set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") + set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190)) if(prob(3)) set_trait(TRAIT_SPORING,1) @@ -654,7 +654,7 @@ if(get_trait(TRAIT_BIOLUM)) source_turf.visible_message("\The [display_name] begins to glow!") if(prob(degree*2)) - set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") + set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190)) source_turf.visible_message("\The [display_name]'s glow changes colour!") else source_turf.visible_message("\The [display_name]'s glow dims...") diff --git a/code/modules/hydroponics/seed_datums_ch.dm b/code/modules/hydroponics/seed_datums_ch.dm index e15c3b2b3d..9d12d808c6 100644 --- a/code/modules/hydroponics/seed_datums_ch.dm +++ b/code/modules/hydroponics/seed_datums_ch.dm @@ -1,4 +1,4 @@ -//Variables to make certain things work. Consider sending upstream. +//Variables to make certain things work. Consider sending upstream. /datum/seed var/ai_mob_product = 0 //This variable determines whether or not a mob product is meant to be ai-controlled. If set to 0, mob products die without a player to control them. @@ -12,21 +12,29 @@ /datum/seed/soybean/sapbean/orange name = "orangesapbean" - mutants = list("Purplesapbean","bluesapbean","blacksapbean") + seed_name = "orange sapbean" + display_name = "orange sapbean" + mutants = list("purplesapbean","bluesapbean","blacksapbean") chems = list("orangesap" = list(0,10)) /datum/seed/soybean/sapbean/purple name = "purplesapbean" - mutants = list("Orangesapbean","bluesapbean","blacksapbean") + seed_name = "purple sapbean" + display_name = "purple sapbean" + mutants = list("orangesapbean","bluesapbean","blacksapbean") chems = list("purplesap" = list(0,10)) /datum/seed/soybean/sapbean/blue name = "bluesapbean" + seed_name = "blue sapbean" + display_name = "blue sapbean" mutants = list("orangesapbean","purplesapbean","blacksapbean") chems = list("bluesap" = list(0,10)) /datum/seed/soybean/sapbean/black //A bean with all the power but in so little quanitity name = "blacksapbean" + seed_name = "black sapbean" + display_name = "black sapbean" chems = list("bluesap" = list(1,2),"orangesap" = list(1,2),"purplesap" = list(1,2)) /datum/seed/soybean/sapbean/orange/New() @@ -52,12 +60,12 @@ set_trait(TRAIT_POTENCY,10) set_trait(TRAIT_YIELD,2) -//Adding self harvesting apples which contain poison and can mutate into poisonapples -/datum/seed/apple/falling - name = "fallingapple" - mutants = list("poisonapple") - can_self_harvest = 1 - chems = list("nutriment" = list(1,5),"applejuice" = list(5,10),"cyanide" = list(1,3)) +//Commenting out because self_harvesting can be troublesome. +// /datum/seed/apple/falling +// name = "fallingapple" +// mutants = list("poisonapple") +// can_self_harvest = 1 +// chems = list("nutriment" = list(1,5),"applejuice" = list(5,10),"cyanide" = list(1,3)) /datum/seed/wheat/meatwheat name = "meatwheat" @@ -219,4 +227,4 @@ set_trait(TRAIT_POTENCY,10) set_trait(TRAIT_PRODUCT_ICON, "stalk") set_trait(TRAIT_PRODUCT_COLOUR, "#FF9A85") - set_trait(TRAIT_PLANT_ICON,"tree2") \ No newline at end of file + set_trait(TRAIT_PLANT_ICON,"tree2") diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 32013d9734..ee758860e2 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -68,15 +68,15 @@ active = 0 if(failed_task) failed_task = 0 - visible_message("[bicon(src)] [src] pings unhappily, flashing a red warning light.") + visible_message("\icon[src][bicon(src)] [src] pings unhappily, flashing a red warning light.") else - visible_message("[bicon(src)] [src] pings happily.") + visible_message("\icon[src][bicon(src)] [src] pings happily.") if(eject_disk) eject_disk = 0 if(loaded_disk) loaded_disk.loc = get_turf(src) - visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null /obj/machinery/botany/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -190,7 +190,7 @@ SSplants.seeds[seed.seed.name] = seed.seed seed.update_seed() - visible_message("[bicon(src)] [src] beeps and spits out [seed].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [seed].") seed = null return TRUE @@ -199,7 +199,7 @@ if(!loaded_disk) return loaded_disk.forceMove(get_turf(src)) - visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null return TRUE @@ -272,7 +272,7 @@ /obj/machinery/botany/editor/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + data["activity"] = active if(seed) diff --git a/code/modules/hydroponics/seedtypes/apples.dm b/code/modules/hydroponics/seedtypes/apples.dm index 4bd8a0bade..4146ba7903 100644 --- a/code/modules/hydroponics/seedtypes/apples.dm +++ b/code/modules/hydroponics/seedtypes/apples.dm @@ -4,7 +4,7 @@ seed_name = "apple" display_name = "apple tree" kitchen_tag = "apple" - mutants = list("poisonapple","goldapple") + mutants = list("poisonapple", "goldapple") chems = list("nutriment" = list(1,10),"applejuice" = list(10,20)) /datum/seed/apple/New() @@ -59,4 +59,4 @@ set_trait(TRAIT_PRODUCT_COLOUR,"#0720c3") set_trait(TRAIT_PLANT_ICON,"tree5") set_trait(TRAIT_FLESH_COLOUR,"#05157d") - set_trait(TRAIT_IDEAL_LIGHT, 1) \ No newline at end of file + set_trait(TRAIT_IDEAL_LIGHT, 1) diff --git a/code/modules/hydroponics/seedtypes/flowers.dm b/code/modules/hydroponics/seedtypes/flowers.dm index 2c2ffe13ec..76232cafd7 100644 --- a/code/modules/hydroponics/seedtypes/flowers.dm +++ b/code/modules/hydroponics/seedtypes/flowers.dm @@ -41,6 +41,7 @@ name = "sunflowers" seed_name = "sunflower" display_name = "sunflowers" + mutants = list("solarflower") //CHOMPEdit - Adding mutation strain for solarflowers. kitchen_tag = "sunflower" /datum/seed/flower/sunflower/New() @@ -58,6 +59,7 @@ seed_name = "lavender" display_name = "lavender" kitchen_tag = "lavender" + mutants = list("milkdew") //CHOMPEdit - Adding mutation strain for milkdew. chems = list("nutriment" = list(1,20), "bicaridine" = list(1,10)) /datum/seed/flower/lavender/New() @@ -105,4 +107,4 @@ ..() set_trait(TRAIT_IDEAL_LIGHT, 1) set_trait(TRAIT_PLANT_COLOUR,"#5e0303") - set_trait(TRAIT_CARNIVOROUS,1) \ No newline at end of file + set_trait(TRAIT_CARNIVOROUS,1) diff --git a/code/modules/hydroponics/seedtypes/potato.dm b/code/modules/hydroponics/seedtypes/potato.dm index 8aad55afc6..e847324f6c 100644 --- a/code/modules/hydroponics/seedtypes/potato.dm +++ b/code/modules/hydroponics/seedtypes/potato.dm @@ -3,6 +3,7 @@ seed_name = "potato" display_name = "potatoes" kitchen_tag = "potato" + mutants = list("voltato") //CHOMPEdit - Adding mutation strain for voltatoes. chems = list("nutriment" = list(1,10), "potatojuice" = list(10,10)) /datum/seed/potato/New() @@ -15,4 +16,4 @@ set_trait(TRAIT_PRODUCT_ICON,"potato") set_trait(TRAIT_PRODUCT_COLOUR,"#D4CAB4") set_trait(TRAIT_PLANT_ICON,"bush2") - set_trait(TRAIT_WATER_CONSUMPTION, 6) \ No newline at end of file + set_trait(TRAIT_WATER_CONSUMPTION, 6) diff --git a/code/modules/hydroponics/seedtypes/soybean.dm b/code/modules/hydroponics/seedtypes/soybean.dm index 22329be263..2602c47f2c 100644 --- a/code/modules/hydroponics/seedtypes/soybean.dm +++ b/code/modules/hydroponics/seedtypes/soybean.dm @@ -3,6 +3,7 @@ seed_name = "soybean" display_name = "soybeans" kitchen_tag = "soybeans" + mutants = list("orangesapbean","bluesapbean","purplesapbean") //CHOMPEdit - Adding mutation strain for sap beans. chems = list("nutriment" = list(1,20), "soymilk" = list(10,20)) /datum/seed/soybean/New() @@ -14,4 +15,4 @@ set_trait(TRAIT_POTENCY,5) set_trait(TRAIT_PRODUCT_ICON,"bean") set_trait(TRAIT_PRODUCT_COLOUR,"#EBE7C0") - set_trait(TRAIT_PLANT_ICON,"stalk") \ No newline at end of file + set_trait(TRAIT_PLANT_ICON,"stalk") diff --git a/code/modules/hydroponics/seedtypes/wheat.dm b/code/modules/hydroponics/seedtypes/wheat.dm index a657490c15..41043ca82f 100644 --- a/code/modules/hydroponics/seedtypes/wheat.dm +++ b/code/modules/hydroponics/seedtypes/wheat.dm @@ -3,6 +3,7 @@ seed_name = "wheat" display_name = "wheat stalks" kitchen_tag = "wheat" + mutants = list("meatwheat") //CHOMPEdit - Adding mutation strain for meatwheat. chems = list("nutriment" = list(1,25), "flour" = list(10,30)) /datum/seed/wheat/New() @@ -16,4 +17,4 @@ set_trait(TRAIT_PLANT_COLOUR,"#BFAF82") set_trait(TRAIT_PLANT_ICON,"stalk2") set_trait(TRAIT_IDEAL_LIGHT, 6) - set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15) \ No newline at end of file + set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index eae1f78b93..bb33a4e229 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -426,7 +426,7 @@ // harvested yet and it's safe to assume it's restricted to this tray. if(!isnull(SSplants.seeds[seed.name])) seed = seed.diverge() - seed.mutate(severity,get_turf(src)) + seed.mutate(severity,get_turf(src)) return diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index 41a921cd33..def8741909 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -9,7 +9,7 @@ slot_l_hand_str = 'icons/mob/items/lefthand_instruments.dmi', slot_r_hand_str = 'icons/mob/items/righthand_instruments.dmi', ) - + /// Our song datum. var/datum/song/handheld/song /// Our allowed list of instrument ids. This is nulled on initialize. @@ -54,6 +54,12 @@ desc = "A golden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\"" icon_state = "golden_violin" +/obj/item/instrument/xylophone + name = "xylophone" + desc = "A percussion instrument consisting of a series of wooden bars graduated in length." + icon_state = "xylophone" + allowed_instrument_ids = "xylophone" + /obj/item/instrument/piano_synth name = "synthesizer" desc = "An advanced electronic synthesizer that can be used as various instruments." diff --git a/code/modules/instruments/songs/editor.dm b/code/modules/instruments/songs/editor.dm index af884bf2d3..d63ae107cd 100644 --- a/code/modules/instruments/songs/editor.dm +++ b/code/modules/instruments/songs/editor.dm @@ -130,7 +130,7 @@ else if(href_list["import"]) var/t = "" do - t = html_encode(tgui_input_text(usr, "Please paste the entire song, formatted:", text("[]", name), t, multiline = TRUE)) + t = html_encode(tgui_input_text(usr, "Please paste the entire song, formatted:", text("[]", name), t, multiline = TRUE, prevent_enter = TRUE)) if(!in_range(parent, usr)) return diff --git a/code/modules/integrated_electronics/core/assemblies/clothing.dm b/code/modules/integrated_electronics/core/assemblies/clothing.dm index d881d7bd4a..4840537d97 100644 --- a/code/modules/integrated_electronics/core/assemblies/clothing.dm +++ b/code/modules/integrated_electronics/core/assemblies/clothing.dm @@ -53,6 +53,8 @@ if(!T.AdjacentQuick(user)) // So people aren't messing with these from across the room return FALSE var/obj/item/I = user.get_active_hand() // ctrl-shift-click doesn't give us the item, we have to fetch it + if(!I) + return FALSE return IC.attackby(I, user) /obj/item/clothing/attack_self(mob/user) diff --git a/code/modules/integrated_electronics/core/tools.dm b/code/modules/integrated_electronics/core/tools.dm index 4041363326..bef0b467be 100644 --- a/code/modules/integrated_electronics/core/tools.dm +++ b/code/modules/integrated_electronics/core/tools.dm @@ -279,6 +279,11 @@ ) cant_hold = list(/obj/item/weapon/tool/screwdriver/power) +//CHOMPAdd, this whole proc. Emp'ing this one bag causes a recursion loop of over 700 emp_act's, +//Which is enough to trigger byond's recursion level protection +/obj/item/weapon/storage/bag/circuits/emp_act() + return //No + /obj/item/weapon/storage/bag/circuits/basic/Initialize() . = ..() new /obj/item/weapon/storage/bag/circuits/mini/arithmetic(src) diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 4b9f5a9152..332b7bb580 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -414,7 +414,7 @@ if(loc) for(var/mob/O in hearers(1, get_turf(src))) - O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) + O.show_message("\icon[src][bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) /obj/item/integrated_circuit/input/EPv2 name = "\improper EPv2 circuit" diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index c3d269f894..268759e152 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -43,7 +43,7 @@ var/list/nearby_things = range(0, get_turf(src)) for(var/mob/M in nearby_things) var/obj/O = assembly ? assembly : src - to_chat(M, "[bicon(O)] [stuff_to_display]") + to_chat(M, "\icon[O][bicon(O)] [stuff_to_display]") /obj/item/integrated_circuit/output/screen/large name = "large screen" @@ -56,7 +56,7 @@ /obj/item/integrated_circuit/output/screen/large/do_work() ..() var/obj/O = assembly ? loc : assembly - O.visible_message("[bicon(O)] [stuff_to_display]") + O.visible_message("\icon[O][bicon(O)] [stuff_to_display]") /obj/item/integrated_circuit/output/light name = "light" @@ -138,7 +138,7 @@ text = get_pin_data(IC_INPUT, 1) if(!isnull(text)) var/obj/O = assembly ? loc : assembly - audible_message("[bicon(O)] \The [O.name] states, \"[text]\"", runemessage = text) + audible_message("\icon[O][bicon(O)] \The [O.name] states, \"[text]\"", runemessage = text) /obj/item/integrated_circuit/output/text_to_speech/advanced name = "advanced text-to-speech circuit" diff --git a/code/modules/materials/materials/_materials.dm b/code/modules/materials/materials/_materials.dm index f059aa28c6..168fd67938 100644 --- a/code/modules/materials/materials/_materials.dm +++ b/code/modules/materials/materials/_materials.dm @@ -109,7 +109,7 @@ var/list/name_to_material var/datum/material/key = arguments[1] if(istype(key)) return key // we want to convert anything we're given to a material - + if(istext(key)) // text ID . = name_to_material[key] if(!.) @@ -363,7 +363,7 @@ var/list/name_to_material ) if(icon_base == "solid") // few icons recipes += new /datum/stack_recipe("[display_name] wall girders (eris)", /obj/structure/girder/eris, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE) - recipes += new /datum/stack_recipe_list("low walls",list( + recipes += new /datum/stack_recipe_list("low walls",list( new /datum/stack_recipe("low wall (bay style)", /obj/structure/low_wall/bay, 3, time = 20, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", recycle_material = "[name]"), new /datum/stack_recipe("low wall (eris style)", /obj/structure/low_wall/eris, 3, time = 20, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", recycle_material = "[name]") )) diff --git a/code/modules/materials/materials/metals/steel.dm b/code/modules/materials/materials/metals/steel.dm index ca63d24b9c..cc6a58792a 100644 --- a/code/modules/materials/materials/metals/steel.dm +++ b/code/modules/materials/materials/metals/steel.dm @@ -69,7 +69,7 @@ new /datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]"), new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"), new /datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]"), - new /datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("frame parts", /obj/item/frame, 5, time = 25, on_floor = 1, recycle_material = "[name]"), new /datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"), new /datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"), new /datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"), diff --git a/code/modules/materials/materials/organic/wood.dm b/code/modules/materials/materials/organic/wood.dm index 25b5c2149b..c4379dff95 100644 --- a/code/modules/materials/materials/organic/wood.dm +++ b/code/modules/materials/materials/organic/wood.dm @@ -38,7 +38,6 @@ new /datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]"), - new /datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), new /datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), //VOREStation Add @@ -74,7 +73,7 @@ icon_base = "stone" icon_reinf = "reinf_stone" integrity = 65 //a bit stronger than regular wood - hardness = 20 + hardness = 20 weight = 20 //likewise, heavier /datum/material/wood/hardwood/generate_recipes() diff --git a/code/modules/media/walkpod.dm b/code/modules/media/walkpod.dm index 8b1a2e2876..3ef0f046b6 100644 --- a/code/modules/media/walkpod.dm +++ b/code/modules/media/walkpod.dm @@ -16,13 +16,14 @@ var/playing = 0 var/volume = 1 - + var/media_url = "" var/media_start_time var/obj/item/device/headpods/deployed_headpods w_class = ITEMSIZE_COST_SMALL + slot_flags = SLOT_BELT /obj/item/device/walkpod/Destroy() remove_listener() @@ -56,7 +57,7 @@ to_chat(listener, "You are no longer wearing the [src]'s headphones.") listener = null update_icon() - + /obj/item/device/walkpod/proc/set_listener(mob/living/L) if(listener) remove_listener() @@ -170,7 +171,7 @@ /obj/item/device/walkpod/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + data["playing"] = playing data["loop_mode"] = loop_mode data["volume"] = volume diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index f3a315827d..d6e72e4e33 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -215,3 +215,10 @@ to_chat(user, "Last code attempt, [previousattempt], had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.") return ..() + +/obj/structure/closet/crate/secure/loot/damage(var/damage) + if(contents.len) + visible_message("[src] makes a grinding noise as its contents are destroyed by the deca-lock safety!") + for(var/obj/O in src.contents) + qdel(O) + ..() \ No newline at end of file diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm index 9d6eea4607..b1427946c9 100644 --- a/code/modules/mining/drilling/scanner.dm +++ b/code/modules/mining/drilling/scanner.dm @@ -51,7 +51,7 @@ if(ore_type) metals[ore_type] += T.resources[metal] - var/message = "[bicon(src)] The scanner beeps and displays a readout." + var/message = "\icon[src][bicon(src)] The scanner beeps and displays a readout." for(var/ore_type in metals) var/result = "no sign" diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 396325a97a..632781992e 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -361,7 +361,7 @@ var/list/mining_overlay_cache = list() //Not even going to touch this pile of spaghetti /turf/simulated/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return diff --git a/code/modules/mob/dead/corpse.dm b/code/modules/mob/dead/corpse.dm index 18d81bf484..670f76226c 100644 --- a/code/modules/mob/dead/corpse.dm +++ b/code/modules/mob/dead/corpse.dm @@ -26,6 +26,7 @@ var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID + var/corpsesensormode = 0 //CHOMPAdd - For setting the suit sensors of a corpse. Default to 0 so we don't annoy medbay. /obj/effect/landmark/mobcorpse/New() createCorpse() @@ -36,6 +37,8 @@ M.set_stat(DEAD) //Kills the new mob if(src.corpseuniform) M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform) + if(M.w_uniform) + M.w_uniform?:sensor_mode = corpsesensormode //CHOMPEdit if(src.corpsesuit) M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit) if(src.corpseshoes) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index d3c6fa973d..3958cee14a 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -983,6 +983,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Blank pAI alert" set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope." + var/time_till_respawn = time_till_respawn() + if(time_till_respawn == -1) // Special case, never allowed to respawn + to_chat(usr, "Respawning is not allowed!") + else if(time_till_respawn) // Nonzero time to respawn + to_chat(usr, "You can't do that yet! You died too recently. You need to wait another [round(time_till_respawn/10/60, 0.1)] minutes.") + return + if(jobban_isbanned(usr, "pAI")) to_chat(usr,"You cannot alert pAI cards when you are banned from playing as a pAI.") return diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 54a86d9b28..797918d0f8 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -92,7 +92,7 @@ var/list/combined = combine_message(message_pieces, verb, speaker) var/message = combined["formatted"] if(message == "") - return + return FALSE if(sleeping || stat == UNCONSCIOUS) hear_sleep(multilingual_to_message(message_pieces)) @@ -129,9 +129,11 @@ var/turf/source = speaker ? get_turf(speaker) : get_turf(src) playsound_local(source, speech_sound, sound_vol, 1) + return TRUE + // Done here instead of on_hear_say() since that is NOT called if the mob is clientless (which includes most AI mobs). /mob/living/hear_say(var/list/message_pieces, var/verb = "says", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) - ..() + .=..() if(has_AI()) // Won't happen if no ai_holder exists or there's a player inside w/o autopilot active. ai_holder.on_hear_say(speaker, multilingual_to_message(message_pieces)) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 5b718fe0df..9fcf0f9427 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -107,11 +107,13 @@ var/list/holder_mob_icon_cache = list() to_chat(held, "You extricate yourself from [holster].") forceMove(get_turf(src)) held.reset_view(null) - else if(isitem(loc)) + var/obj/item/I = loc to_chat(held, "You struggle free of [loc].") forceMove(get_turf(src)) held.reset_view(null) + if(istype(I)) + I.on_holder_escape(src) //Mob specific holders. /obj/item/weapon/holder/diona diff --git a/code/modules/mob/language/generic.dm b/code/modules/mob/language/generic.dm index 55ba735af4..0c2fecfabc 100644 --- a/code/modules/mob/language/generic.dm +++ b/code/modules/mob/language/generic.dm @@ -18,7 +18,7 @@ // 'basic' language; spoken by default. /datum/language/common name = LANGUAGE_GALCOM - desc = "The common galactic tongue, engineered for cross-species communication." + desc = "The common galactic tongue, engineered for cross-species communication. Every spacer there is knows this!" speech_verb = "says" whisper_verb = "whispers" key = "0" @@ -127,7 +127,7 @@ /datum/language/sign name = LANGUAGE_SIGN - desc = "A sign language commonly used for those who are deaf or mute." + desc = "A sign language commonly used for those who are deaf or mute. Especially popular with spacers, due to practicality in airless environments." signlang_verb = list("gestures") colour = "say_quote" key = "s" @@ -152,7 +152,7 @@ // Silly language for those times when you try to talk a languague you normally can't /datum/language/gibberish name = LANGUAGE_GIBBERISH - desc = "A completely incomprehensible language." + desc = "A completely incomprehensible gibberish that can barely be called a language." signlang_verb = list("flails") speech_verb = "spews" whisper_verb = "mumbles" diff --git a/code/modules/mob/language/monkey.dm b/code/modules/mob/language/monkey.dm index 6736b803fc..8224ca7aa8 100644 --- a/code/modules/mob/language/monkey.dm +++ b/code/modules/mob/language/monkey.dm @@ -1,61 +1,16 @@ -/datum/language/human/monkey - name = "Chimpanzee" - desc = "Ook ook ook." - speech_verb = "chimpers" - ask_verb = "chimpers" - exclaim_verb = "screeches" +/datum/language/human/animal + name = LANGUAGE_ANIMAL + desc = "A collection of ooking noises made by monkeys" + speech_verb = "says" + ask_verb = "inquires" + exclaim_verb = "yells" key = "C" - syllables = list("ook","eek") + syllables = list("chrp","tweet","squick","croak","hiss","gronk","meow","mew","bark", "woof", "bowwow", "yap", "arf") //This is a generalized animal language. If spoken by an animal, it comes out with the mob noises. This only occurs when spoken by a carbon (human). machine_understands = 0 -/datum/language/skrell/monkey - name = "Neaera" - desc = "Squik squik squik." - key = "8" - syllables = list("hiss","gronk") - machine_understands = 0 - -/datum/language/unathi/monkey - name = "Stok" - desc = "Hiss hiss hiss." - key = "7" - syllables = list("squick","croak") - machine_understands = 0 - -/datum/language/tajaran/monkey - name = "Farwa" - desc = "Meow meow meow." - key = "9" - syllables = list("meow","mew") - machine_understands = 0 - -/datum/language/corgi - name = "Dog" - desc = "Woof woof woof." - speech_verb = "barks" - ask_verb = "woofs" - exclaim_verb = "howls" - key = "n" - flags = RESTRICTED - machine_understands = 0 - space_chance = 100 - syllables = list("bark", "woof", "bowwow", "yap", "arf") - -/datum/language/cat - name = "Cat" - desc = "Meow meow meow." - speech_verb = "meows" - ask_verb = "mrowls" - exclaim_verb = "yowls" - key = "c" - flags = RESTRICTED - machine_understands = 0 - space_chance = 100 - syllables = list("meow", "mrowl", "purr", "meow", "meow", "meow") - /datum/language/mouse name = "Mouse" - desc = "Squeak squeak. *Nibbles on cheese*" + desc = "A set of squeaks that only mice can understand." speech_verb = "squeaks" ask_verb = "squeaks" exclaim_verb = "squeaks" @@ -65,14 +20,14 @@ space_chance = 100 syllables = list("squeak") // , "gripes", "oi", "meow") -/datum/language/bird - name = "Bird" - desc = "Chirp chirp, give me food" - speech_verb = "chirps" - ask_verb = "tweets" - exclaim_verb = "squawks" - key = "B" - flags = RESTRICTED +/datum/language/teppi + name = "Teppi" + desc = "A set of gyohs that only teppi can understand." + speech_verb = "rumbles" + ask_verb = "tilts" + exclaim_verb = "roars" + key = "i" + flags = WHITELISTED machine_understands = 0 space_chance = 100 - syllables = list("chirp", "squawk", "tweet") + syllables = list("gyoh", "snoof", "gyoooooOOOooh", "iuuuuh", "gyuuuuh") diff --git a/code/modules/mob/language/outsider.dm b/code/modules/mob/language/outsider.dm index c2417a3b40..ff72aa1b24 100644 --- a/code/modules/mob/language/outsider.dm +++ b/code/modules/mob/language/outsider.dm @@ -74,17 +74,6 @@ "gal'h'rfikk", "harfrandid", "mud'gib", "il", "fuu", "ma'jin", "dedo", "ol'btoh", "n'ath", "reth", "sh'yro", "eth", \ "d'rekkathnor", "khari'd", "gual'te", "nikka", "nikt'o", "barada", "kla'atu", "barhah", "hra" ,"zar'garis", "spiri", "malum") -/datum/language/cult - name = LANGUAGE_OCCULT - desc = "The initiated can share their thoughts by means defying all reason." - speech_verb = "intones" - ask_verb = "intones" - exclaim_verb = "chants" - colour = "cult" - key = "y" - machine_understands = 0 - flags = RESTRICTED | HIVEMIND - /datum/language/xenocommon name = "Xenolingua" //CHOMPedit colour = "alien" @@ -143,32 +132,6 @@ "danya","da","mied","zan","das","krem","myka","cyka","blyat","to","st","no","na","ni", "ko","ne","en","po","ra","li","on","byl","cto","eni","ost","ol","ego","ver","stv","pro") -//For your event purposes. -/datum/language/occursus - name = LANGUAGE_EVENT1 - desc = "The Powers That Be have seen it fit to grace you with a special language that sounds like... something. This description should be overridden by the time you see this." - speech_verb = "says" - ask_verb = "asks" - exclaim_verb = "shouts" - colour = "warning" - key = "]" - flags = RESTRICTED - syllables = list("chan","ange","thi","se") - -//Bloblang. -/datum/language/blob - name = LANGUAGE_BLOB - desc = "The massive processing power of the Blob's core gives the overmind finely tuned abilities to transmit messages to nearby life-forms through chemical signals." - speech_verb = "resonates" - ask_verb = "reverberates" - exclaim_verb = "shudders" - colour = "blob" - key = "}" - machine_understands = TRUE - flags = RESTRICTED - - syllables = list("^", "Ë…", "-", "°", "~") - /datum/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) var/mob/living/simple_mob/animal/borer/B diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index 3069427453..58e55e15a8 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -114,7 +114,7 @@ /datum/language/skrell name = LANGUAGE_SKRELLIAN - desc = "A set of warbles and hums, the language itself a complex mesh of both melodic and rhythmic components, exceptionally capable of conveying intent and emotion of the speaker." + desc = "A set of warbles and hums, the language itself a complex mesh of both melodic and rhythmic components, exceptionally capable of conveying intent and emotion of the speaker. Native to Skrell." speech_verb = "warbles" ask_verb = "warbles" exclaim_verb = "sings" @@ -125,19 +125,6 @@ // flags = WHITELISTED (YWEdit) syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix") -/datum/language/skrellfar - name = LANGUAGE_SKRELLIANFAR - desc = "The most common language among the Skrellian Far Kingdoms. Has an even higher than usual concentration of inaudible phonemes." - speech_verb = "warbles" - ask_verb = "warbles" - exclaim_verb = "sings" - whisper_verb = "hums" - colour = "skrellfar" - key = "p" - space_chance = 30 -// flags = WHITELISTED (YWEdit) - syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix", "...", "oo", "q", "nq", "x", "xq", "ll", "...", "...", "...") //should sound like there's holes in it - /datum/language/skrell/get_random_name(var/gender) var/list/first_names = file2list('config/names/first_name_skrell.txt') var/list/last_names = file2list('config/names/last_name_skrell.txt') @@ -145,7 +132,7 @@ /datum/language/human name = LANGUAGE_SOL_COMMON - desc = "A bastardized hybrid of many languages, including Chinese, English, French, and more; it is the common language of the Sol system." + desc = "A bastardized hybrid of many human languages, including Chinese, English, French, and more; it is the common language of the Sol system." speech_verb = "says" whisper_verb = "whispers" colour = "solcom" @@ -172,7 +159,7 @@ /datum/language/machine name = LANGUAGE_EAL - desc = "An efficient language of encoded tones developed by positronics." + desc = "An efficient language of encoded tones developed by positronics, although compatible with any synthetic lifeforms." speech_verb = "whistles" ask_verb = "chirps" exclaim_verb = "whistles loudly" @@ -190,7 +177,7 @@ /datum/language/teshari name = LANGUAGE_SCHECHI - desc = "A trilling language spoken by the diminutive Teshari." + desc = "A trilling language spoken by the Teshari." speech_verb = "chirps" ask_verb = "chirrups" exclaim_verb = "trills" @@ -222,7 +209,7 @@ /datum/language/promethean name = LANGUAGE_PROMETHEAN - desc = "A complex language composed of guttural noises and bioluminescent signals" + desc = "A complex language of prometheans, composed of guttural noises and bioluminescent signals." signlang_verb = list("flickers","flashes","rapidly flashes a light","quickly flickers a light") speech_verb = "gurgles" ask_verb = "gurgles" diff --git a/code/modules/mob/language/station_vr.dm b/code/modules/mob/language/station_vr.dm index 9c52508724..7be2976d69 100644 --- a/code/modules/mob/language/station_vr.dm +++ b/code/modules/mob/language/station_vr.dm @@ -11,7 +11,7 @@ /datum/language/birdsong name = LANGUAGE_BIRDSONG - desc = "A language primarily spoken by Narvians" + desc = "A tweety language primarily spoken by Nevreans." speech_verb = "chirps" colour = "birdsongc" key = "G" @@ -103,7 +103,7 @@ machine_understands = FALSE flags = RESTRICTED | HIVEMIND //CHOMPstation Edit: Changining from WHITELISTED to RESTRICTED | Empathy should be shadekin exclusive. This probably breaks carbon shadekins ability to use emptathy, we dont use them and if it does it should be implemented like DIONA root talk. -shark -/datum/language/slavic +/datum/language/slavic //CHOMP reAdd this language name = LANGUAGE_SLAVIC desc = "The official language of the Independent Colonial Confederation of Gilgamesh, originally established in 2122 by the short-lived United Slavic Confederation on Earth." speech_verb = "govorit" // All Russian for "says" "asks" and "shouts". Mostly here as a joke. @@ -119,20 +119,6 @@ "ver", "stv", "pro", "ski" ) -/datum/language/clownish - name = LANGUAGE_CLOWNISH - desc = "A special elective language course for those studying at the Clown Planet Institute." - speech_verb = "honks" - ask_verb = "seins" - exclaim_verb = "crenks" - whisper_verb = "squeaks" - colour = "#F785F2" // Pink for the clown. - key = "<" - flags = WHITELISTED | CLOWN - syllables = list( - "honk", "knock", "salt", "slip", "lube", "banana", "flower", "pie", "did you hear", "🅱ï¸", "haha", "bully", "going up", - ) - /datum/language/drudakar name = LANGUAGE_DRUDAKAR desc = "The native language of the D'Rudak'Ar, a loosely tied together community of dragons and demi-dragons based in the Diul system. Features include many hard consonants and rolling 'r's." @@ -160,7 +146,7 @@ /datum/language/tavan name = LANGUAGE_TAVAN - desc = "A language native to the Altevians, it has been adopted by other rodent faring species over time." + desc = "A language native to the rat-like Altevians, it has been adopted by other rodent faring species over time." key = "E" speech_verb = "squeaks" whisper_verb = "squiks" @@ -171,7 +157,7 @@ /datum/language/echosong name = LANGUAGE_ECHOSONG - desc = "An ultrasound-based language, inaudible to those unable to understand it." + desc = "An ultrasound-based language, inaudible to those unable to understand it, spoken by few species capable of actually hearing it." key = "U" signlang_verb = list("opens their mouth soundlessly", "mouthes something silently") signlang_verb_understood = list("squeaks") @@ -202,11 +188,5 @@ machine_understands = FALSE desc = "A dialect of Tradeband not uncommon amongst traders in the Free Trade Union. The language is often difficult to translate due to changing frequently and being highly colloquial." partial_understanding = list(LANGUAGE_TRADEBAND = 30, LANGUAGE_SOL_COMMON = 10) -/datum/language/human/monkey - flags = RESTRICTED -/datum/language/skrell/monkey - flags = RESTRICTED -/datum/language/unathi/monkey - flags = RESTRICTED -/datum/language/tajaran/monkey +/datum/language/human/animal flags = RESTRICTED diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b0557e2bc1..3904656a99 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -236,7 +236,7 @@ status += "MISSING" if(org.status & ORGAN_MUTATED) status += "weirdly shapen" - if(org.dislocated == 2) + if(org.dislocated == 1) //VOREStation Edit Bugfix status += "dislocated" if(org.status & ORGAN_BROKEN) status += "hurts when touched" diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index bac825919a..ec3eba894d 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -96,6 +96,15 @@ var/list/_human_default_emotes = list( /decl/emote/visible/floorspin, /decl/emote/visible/flip, //VOREStation Add + /decl/emote/audible/bug_hiss, + /decl/emote/audible/bug_buzz, + /decl/emote/audible/bug_chitter, + /decl/emote/audible/hiss, + /decl/emote/audible/chirp, + /decl/emote/audible/warble, + /decl/emote/audible/vox_shriek, + /decl/emote/audible/purr, + /decl/emote/audible/purrlong, /decl/emote/audible/awoo, /decl/emote/audible/awoo2, /decl/emote/audible/belch, @@ -145,8 +154,14 @@ var/list/_human_default_emotes = list( /decl/emote/audible/coyawoo4, /decl/emote/audible/coyawoo5, /decl/emote/audible/fennecscream, - /decl/emote/audible/zoom + /decl/emote/audible/zoom, + /decl/emote/audible/mothscream, + /decl/emote/audible/mothchitter, + /decl/emote/audible/mothlaugh, //VOREStation Add End + //CHOMP Add start + /decl/emote/audible/prbt2 + //CHOMP Add end ) //VOREStation Add Start @@ -277,8 +292,19 @@ var/list/_simple_mob_default_emotes = list( /decl/emote/audible/gyoh, /decl/emote/audible/rumble, /decl/emote/audible/fennecscream, - /decl/emote/audible/zoom - + /decl/emote/audible/zoom, + /decl/emote/audible/bug_hiss, + /decl/emote/audible/bug_buzz, + /decl/emote/audible/bug_chitter, + /decl/emote/audible/hiss, + /decl/emote/audible/chirp, + /decl/emote/audible/warble, + /decl/emote/audible/vox_shriek, + /decl/emote/audible/purr, + /decl/emote/audible/purrlong, + //CHOMP Add start + /decl/emote/audible/prbt2 + //CHOMP Add end ) //VOREStation Add End diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 65560c651f..2cb5300a7f 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -101,7 +101,7 @@ else if(species.name != "Human") name_ender = ", \a [species.get_examine_name()]![species.get_additional_examine_text(src)]" - var/list/msg = list("*---------*","This is [bicon(src)] [src.name][name_ender]") + var/list/msg = list("*---------*","This is \icon[src.examine_icon()][bicon(src)] [src.name][name_ender]") //uniform if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine) @@ -136,16 +136,16 @@ tie_msg += " Near the waist it has [english_list(pocket_msg)]." if(w_uniform.blood_DNA) - msg += "[T.He] [T.is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]" + msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]" else - msg += "[T.He] [T.is] wearing [bicon(w_uniform)] \a [w_uniform].[tie_msg]" + msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(w_uniform)] \a [w_uniform].[tie_msg]" //head if(head && !(skip_gear & EXAMINE_SKIPHELMET) && head.show_examine) if(head.blood_DNA) - msg += "[T.He] [T.is] wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!" + msg += "[T.He] [T.is] wearing \icon[head][bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!" else - msg += "[T.He] [T.is] wearing [bicon(head)] \a [head] on [T.his] head." + msg += "[T.He] [T.is] wearing \icon[head][bicon(head)] \a [head] on [T.his] head." //suit/armour if(wear_suit) @@ -156,71 +156,71 @@ tie_msg += " Attached to it is [english_list(U.accessories)]." if(wear_suit.blood_DNA) - msg += "[T.He] [T.is] wearing [bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name][tie_msg]!" + msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name][tie_msg]!" else - msg += "[T.He] [T.is] wearing [bicon(wear_suit)] \a [wear_suit].[tie_msg]" + msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] \a [wear_suit].[tie_msg]" //suit/armour storage if(s_store && !(skip_gear & EXAMINE_SKIPSUITSTORAGE) && s_store.show_examine) if(s_store.blood_DNA) - msg += "[T.He] [T.is] carrying [bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!" + msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!" else - msg += "[T.He] [T.is] carrying [bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name]." + msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name]." //back if(back && !(skip_gear & EXAMINE_SKIPBACKPACK) && back.show_examine) if(back.blood_DNA) - msg += "[T.He] [T.has] [bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back." + msg += "[T.He] [T.has] \icon[back][bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back." else - msg += "[T.He] [T.has] [bicon(back)] \a [back] on [T.his] back." + msg += "[T.He] [T.has] \icon[back][bicon(back)] \a [back] on [T.his] back." //left hand if(l_hand && l_hand.show_examine) if(l_hand.blood_DNA) - msg += "[T.He] [T.is] holding [bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!" + msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!" else - msg += "[T.He] [T.is] holding [bicon(l_hand)] \a [l_hand] in [T.his] left hand." + msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] \a [l_hand] in [T.his] left hand." //right hand if(r_hand && r_hand.show_examine) if(r_hand.blood_DNA) - msg += "[T.He] [T.is] holding [bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!" + msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!" else - msg += "[T.He] [T.is] holding [bicon(r_hand)] \a [r_hand] in [T.his] right hand." + msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] \a [r_hand] in [T.his] right hand." //gloves if(gloves && !(skip_gear & EXAMINE_SKIPGLOVES) && gloves.show_examine) if(gloves.blood_DNA) - msg += "[T.He] [T.has] [bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!" + msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!" else - msg += "[T.He] [T.has] [bicon(gloves)] \a [gloves] on [T.his] hands." + msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] \a [gloves] on [T.his] hands." else if(blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) msg += "[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!" //handcuffed? if(handcuffed && handcuffed.show_examine) if(istype(handcuffed, /obj/item/weapon/handcuffs/cable)) - msg += "[T.He] [T.is] [bicon(handcuffed)] restrained with cable!" + msg += "[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] restrained with cable!" else - msg += "[T.He] [T.is] [bicon(handcuffed)] handcuffed!" + msg += "[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] handcuffed!" //buckled if(buckled) - msg += "[T.He] [T.is] [bicon(buckled)] buckled to [buckled]!" + msg += "[T.He] [T.is] \icon[buckled][bicon(buckled)] buckled to [buckled]!" //belt if(belt && !(skip_gear & EXAMINE_SKIPBELT) && belt.show_examine) if(belt.blood_DNA) - msg += "[T.He] [T.has] [bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!" + msg += "[T.He] [T.has] \icon[belt][bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!" else - msg += "[T.He] [T.has] [bicon(belt)] \a [belt] about [T.his] waist." + msg += "[T.He] [T.has] \icon[belt][bicon(belt)] \a [belt] about [T.his] waist." //shoes if(shoes && !(skip_gear & EXAMINE_SKIPSHOES) && shoes.show_examine) if(shoes.blood_DNA) - msg += "[T.He] [T.is] wearing [bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!" + msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!" else - msg += "[T.He] [T.is] wearing [bicon(shoes)] \a [shoes] on [T.his] feet." + msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] \a [shoes] on [T.his] feet." else if(feet_blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) msg += "[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!" @@ -231,24 +231,24 @@ descriptor = "in [T.his] mouth" if(wear_mask.blood_DNA) - msg += "[T.He] [T.has] [bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!" + msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!" else - msg += "[T.He] [T.has] [bicon(wear_mask)] \a [wear_mask] [descriptor]." + msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] \a [wear_mask] [descriptor]." //eyes if(glasses && !(skip_gear & EXAMINE_SKIPEYEWEAR) && glasses.show_examine) if(glasses.blood_DNA) - msg += "[T.He] [T.has] [bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!" + msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!" else - msg += "[T.He] [T.has] [bicon(glasses)] \a [glasses] covering [T.his] eyes." + msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] \a [glasses] covering [T.his] eyes." //left ear if(l_ear && !(skip_gear & EXAMINE_SKIPEARS) && l_ear.show_examine) - msg += "[T.He] [T.has] [bicon(l_ear)] \a [l_ear] on [T.his] left ear." + msg += "[T.He] [T.has] \icon[l_ear][bicon(l_ear)] \a [l_ear] on [T.his] left ear." //right ear if(r_ear && !(skip_gear & EXAMINE_SKIPEARS) && r_ear.show_examine) - msg += "[T.He] [T.has] [bicon(r_ear)] \a [r_ear] on [T.his] right ear." + msg += "[T.He] [T.has] \icon[r_ear][bicon(r_ear)] \a [r_ear] on [T.his] right ear." //ID if(wear_id && wear_id.show_examine) @@ -260,9 +260,9 @@ var/obj/item/weapon/card/id/idcard = wear_id id = idcard.registered_name if(id && (id != real_name) && (get_dist(src, usr) <= 1) && prob(10)) - msg += "[T.He] [T.is] wearing [bicon(wear_id)] \a [wear_id] yet something doesn't seem right..." + msg += "[T.He] [T.is] wearing \icon[wear_id][bicon(wear_id)] \a [wear_id] yet something doesn't seem right..." else*/ - msg += "[T.He] [T.is] wearing [bicon(wear_id)] \a [wear_id]." + msg += "[T.He] [T.is] wearing \icon[wear_id][bicon(wear_id)] \a [wear_id]." //Jitters if(is_jittery) @@ -371,7 +371,7 @@ wound_flavor_text["[temp.name]"] = "[T.He] [T.has] [temp.get_wounds_desc()] on [T.his] [temp.name]." else wound_flavor_text["[temp.name]"] = "" - if(temp.dislocated == 2) + if(temp.dislocated == 1) //VOREStation Edit Bugfix wound_flavor_text["[temp.name]"] += "[T.His] [temp.joint] is dislocated!" if(temp.brute_dam > temp.min_broken_damage || (temp.status & (ORGAN_BROKEN | ORGAN_MUTATED))) wound_flavor_text["[temp.name]"] += "[T.His] [temp.name] is dented and swollen!" diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm index cb73c0fdc5..52162a96af 100644 --- a/code/modules/mob/living/carbon/human/examine_vr.dm +++ b/code/modules/mob/living/carbon/human/examine_vr.dm @@ -85,13 +85,13 @@ /mob/living/carbon/human/proc/examine_pickup_size(mob/living/H) var/message = "" - if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.50) + if(istype(H) && (H.get_effective_size(FALSE) - src.get_effective_size(TRUE)) >= 0.50) message = "They are small enough that you could easily pick them up!" return message /mob/living/carbon/human/proc/examine_step_size(mob/living/H) var/message = "" - if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.75) + if(istype(H) && (H.get_effective_size(FALSE) - src.get_effective_size(TRUE)) >= 0.75) message = "They are small enough that you could easily trample them!" return message diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 4c74d1e929..f8c266a95b 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -347,7 +347,7 @@ emp_act return 1 /mob/living/carbon/human/proc/attack_joint(var/obj/item/organ/external/organ, var/obj/item/W, var/effective_force, var/dislocate_mult, var/blocked, var/soaked) - if(!organ || (organ.dislocated == 2) || (organ.dislocated == -1) || blocked >= 100) + if(!organ || (organ.dislocated == 1) || (organ.dislocated == -1) || blocked >= 100) //VOREStation Edit Bugfix return 0 if(W.damtype != BRUTE) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 1a9686e7e8..f8f30fe8ff 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -42,8 +42,8 @@ var/mob/living/carbon/human/H = M if(H.size_multiplier > L.size_multiplier) . += 1 - if(H.weight > L.weight) - . += 1 + //if(H.weight > L.weight) weight should not have mechanical impact + //. += 1 //VOREstation end if(istype(buckled, /obj/structure/bed/chair/wheelchair)) @@ -202,7 +202,13 @@ if(restrained()) return 0 if(..()) //Can move due to other reasons, don't use jetpack fuel - return 1 + return TRUE + + if(species.can_space_freemove || (species.can_zero_g_move && !istype(get_turf(src), /turf/space))) //VOREStation Edit. + return TRUE //VOREStation Edit. + + if(flying) //VOREStation Edit. If you're flying, you glide around! + return TRUE //VOREStation Edit. //Do we have a working jetpack? var/obj/item/weapon/tank/jetpack/thrust = get_jetpack() @@ -210,22 +216,23 @@ if(thrust) if(((!check_drift) || (check_drift && thrust.stabilization_on)) && (!lying) && (thrust.do_thrust(0.01, src))) inertia_dir = 0 - return 1 - if(flying) //VOREStation Edit. If you're flying, you glide around! - return 0 //VOREStation Edit. + return TRUE - return 0 + return FALSE /mob/living/carbon/human/Process_Spaceslipping(var/prob_slip = 5) //If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such. if(species.flags & NO_SLIP) - return 0 + return FALSE + + if(species.can_space_freemove || species.can_zero_g_move) + return FALSE var/obj/item/weapon/tank/jetpack/thrust = get_jetpack() if(thrust?.can_thrust(0.01)) - return 0 + return FALSE if(stat) prob_slip = 0 // Changing this to zero to make it line up with the comment, and also, make more sense. diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index 43225a6d34..7350d093e4 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -30,8 +30,8 @@ icon = null icon_state = "" . = ..() - - dress_up() + + dress_up() turntable() /mob/living/carbon/human/dummy/mannequin/autoequip/proc/dress_up() @@ -42,7 +42,7 @@ var/obj/item/clothing/C = I C.species_restricted = null equip_to_appropriate_slot(I) - + if(istype(back, /obj/item/weapon/rig)) var/obj/item/weapon/rig/rig = back rig.toggle_seals(src) @@ -130,6 +130,3 @@ /mob/living/carbon/human/stok/Initialize(var/new_loc) return ..(new_loc, SPECIES_MONKEY_UNATHI) - -/mob/living/carbon/human/event1/Initialize(var/new_loc) - return ..(new_loc, SPECIES_EVENT1) diff --git a/code/modules/mob/living/carbon/human/human_vr.dm b/code/modules/mob/living/carbon/human/human_vr.dm index a60521b5ab..2c621fa3f8 100644 --- a/code/modules/mob/living/carbon/human/human_vr.dm +++ b/code/modules/mob/living/carbon/human/human_vr.dm @@ -11,4 +11,7 @@ /mob/living/carbon/human/Destroy() alt_farmanimals -= src - . = ..() \ No newline at end of file + . = ..() + +/mob/living/carbon/human/get_digestion_nutrition_modifier() + return species.digestion_nutrition_modifier \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d60ea1df39..d2d4821cd9 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -807,6 +807,8 @@ if(adjusted_pressure >= species.hazard_high_pressure) var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) + if(stat==DEAD) + pressure_damage = pressure_damage/2 take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure") throw_alert("pressure", /obj/screen/alert/highpressure, 2) else if(adjusted_pressure >= species.warning_high_pressure) @@ -818,7 +820,10 @@ else if( !(COLD_RESISTANCE in mutations)) if(!isSynthetic() || !nif || !nif.flag_check(NIF_O_PRESSURESEAL,NIF_FLAGS_OTHER)) //VOREStation Edit - NIF pressure seals - take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") + var/pressure_damage = LOW_PRESSURE_DAMAGE + if(stat==DEAD) + pressure_damage = pressure_damage/2 + take_overall_damage(brute=pressure_damage, used_weapon = "Low Pressure") if(getOxyLoss() < 55) // 12 OxyLoss per 4 ticks when wearing internals; unconsciousness in 16 ticks, roughly half a minute var/pressure_dam = 3 // 16 OxyLoss per 4 ticks when no internals present; unconsciousness in 13 ticks, roughly twenty seconds // (Extra 1 oxyloss from failed breath) @@ -1980,8 +1985,10 @@ End Chomp edit */ // increase your body temperature beyond 250C, but it's possible something else (atmos) has heated us up beyond it, // so don't worry about the firestacks at that point. Really, we should be cooling the room down, because it has // to expend energy to heat our body up! But let's not worry about that. - if((bodytemperature + fire_temp_add) > HUMAN_COMBUSTION_TEMP) - return + + // This whole section above is ABSOLUTELY STUPID and makes no sense and this would prevent too-high-heat from even being able to hurt someone. No. We will heat up for as long as needed. + //if((bodytemperature + fire_temp_add) > HUMAN_COMBUSTION_TEMP) + // return bodytemperature += fire_temp_add diff --git a/code/modules/mob/living/carbon/human/species/outsider/replicant.dm b/code/modules/mob/living/carbon/human/species/outsider/replicant.dm index 35aa02d0b2..91d2dbf7e9 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/replicant.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/replicant.dm @@ -73,7 +73,7 @@ blood_color = "#55ff55" species_language = LANGUAGE_SIGN - assisted_langs = list(LANGUAGE_ROOTGLOBAL, LANGUAGE_SOL_COMMON, LANGUAGE_SKRELLIANFAR) + assisted_langs = list(LANGUAGE_ROOTGLOBAL, LANGUAGE_SOL_COMMON) inherent_verbs = list( /mob/living/carbon/human/proc/shapeshifter_select_shape, diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm index 04de53ba87..da0e0e0b9b 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm @@ -6,7 +6,7 @@ default_language = LANGUAGE_VOX language = LANGUAGE_GALCOM species_language = LANGUAGE_VOX - num_alternate_languages = 1 + num_alternate_languages = 3 color_mult = 1 //CHOMP Edit assisted_langs = list(LANGUAGE_ROOTGLOBAL) unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm index 0ac13c062c..db48e6787b 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm @@ -104,6 +104,7 @@ //cut_overlays() invisibility = initial(invisibility) see_invisible = initial(see_invisible) + see_invisible_default = initial(see_invisible_default) // CHOMPEdit - Allow seeing phased entities while phased. incorporeal_move = initial(incorporeal_move) density = initial(density) force_max_speed = initial(force_max_speed) @@ -175,6 +176,7 @@ sleep(5) invisibility = INVISIBILITY_LEVEL_TWO see_invisible = INVISIBILITY_LEVEL_TWO + see_invisible_default = INVISIBILITY_LEVEL_TWO // CHOMPEdit - Allow seeing phased entities while phased. //cut_overlays() update_icon() alpha = 127 diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 844590e79b..2d116e98e0 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -75,7 +75,7 @@ // The languages the species can't speak without an assisted organ. // This list is a guess at things that no one other than the parent species should be able to speak - var/list/assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //VOREStation Edit + var/list/assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //VOREStation Edit //Soundy emotey things. var/scream_verb_1p = "scream" @@ -209,7 +209,8 @@ var/has_glowing_eyes = 0 // Whether the eyes are shown above all lighting var/water_movement = 0 // How much faster or slower the species is in water var/snow_movement = 0 // How much faster or slower the species is on snow - + var/can_space_freemove = FALSE // Can we freely move in space? + var/can_zero_g_move = FALSE // What about just in zero-g non-space? var/item_slowdown_mod = 1 // How affected by item slowdown the species is. var/primitive_form // Lesser form, if any (ie. monkey for humans) @@ -281,6 +282,8 @@ var/wikilink = null //link to wiki page for species var/icon_height = 32 var/agility = 20 //prob() to do agile things + var/gun_accuracy_mod = 0 // More is better + var/gun_accuracy_dispersion_mod = 0 // More is worse var/sort_hint = SPECIES_SORT_NORMAL diff --git a/code/modules/mob/living/carbon/human/species/species_attack_vr.dm b/code/modules/mob/living/carbon/human/species/species_attack_vr.dm index 110b76ef9b..11a6d14973 100644 --- a/code/modules/mob/living/carbon/human/species/species_attack_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_attack_vr.dm @@ -1,63 +1,77 @@ -/datum/unarmed_attack/bite/sharp/numbing //Is using this against someone you are truly trying to fight a bad idea? Yes. Yes it is. - attack_verb = list("bit") - attack_noun = list("fangs") - attack_sound = 'sound/weapons/bite.ogg' - shredding = 0 - sharp = TRUE - edge = TRUE - -/datum/unarmed_attack/bite/sharp/numbing/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) - - attack_damage = CLAMP(attack_damage, 1, 5) - if(target == user) - user.visible_message("[user] sinks their fangs in to themself in the [affecting.name]!") - to_chat(target, "You feel a wave of numbness as you sink your fangs in to yourself.") - target.bloodstr.add_reagent("numbenzyme",attack_damage) //Yawn-edit. Allows adding venom to self. - return 0 - - switch(zone) - if(BP_HEAD, O_MOUTH, O_EYES) - // ----- HEAD ----- // - switch(attack_damage) - if(1 to 2) - user.visible_message("[user]'s fangs scrape across [target]'s cheek!") - to_chat(target, "Your face feels tingly!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) //Have to add this here, otherwise the swtich fails. - if(3 to 4) - user.visible_message("[user]'s fangs pierce into [target]'s neck at an odd, awkward angle!") - to_chat(target, "Your neck feels like it's on fire before going numb!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - if(5) - user.visible_message("[user] sinks \his [pick(attack_noun)] deep into [target]'s neck, causing the vein to bulge outwards at some type of chemical is pumped into it!") - to_chat(target, "Your neck feels like it's going to burst! Moments later, you simply can't feel your neck any longer, the numbness beginning to spread throughout your body!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - else - // ----- BODY ----- // - switch(attack_damage) - if(1 to 2) - user.visible_message("[user]'s fangs scrape across [target]'s [affecting.name]!") - to_chat(target, "Your [affecting.name] feels tingly!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - if(3 to 4) - user.visible_message("[user]'s fangs pierce [pick("", "", "the side of")] [target]'s [affecting.name]!") - to_chat(target, "Your [affecting.name] feels like it's on fire before going numb!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - if(5) - user.visible_message("[user]'s fangs sink deep into [target]'s [affecting.name], one of their veins bulging outwards from the sudden fluid pumped into it!") - to_chat(target, "Your [affecting.name] feels like it's going to burst! Moments later, you simply can't feel your [affecting.name] any longer, the numbness slowly spreading throughout your body!") - target.bloodstr.add_reagent("numbenzyme",attack_damage) - -/datum/unarmed_attack/claws/shadekin - -/datum/unarmed_attack/claws/shadekin/apply_effects(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - ..() - if(!(target == user)) - user.shadekin_adjust_energy(attack_damage) - -/datum/unarmed_attack/bite/sharp/shadekin - -/datum/unarmed_attack/bite/sharp/shadekin/apply_effects(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) - ..() - if(!(target == user)) - user.shadekin_adjust_energy(attack_damage) \ No newline at end of file +/datum/unarmed_attack/bite/sharp/numbing //Is using this against someone you are truly trying to fight a bad idea? Yes. Yes it is. + attack_verb = list("bit") + attack_noun = list("fangs") + attack_sound = 'sound/weapons/bite.ogg' + shredding = 0 + sharp = TRUE + edge = TRUE + +/datum/unarmed_attack/bite/sharp/numbing/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) + + attack_damage = CLAMP(attack_damage, 1, 5) + if(target == user) + user.visible_message("[user] [pick(attack_verb)] \himself in the [affecting.name]!") + return 0 //No venom for you. + switch(zone) + if(BP_HEAD, O_MOUTH, O_EYES) + // ----- HEAD ----- // + switch(attack_damage) + if(1 to 2) + user.visible_message("[user]'s fangs scrape across [target]'s cheek!") + to_chat(target, "Your face feels tingly!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) //Have to add this here, otherwise the swtich fails. + if(3 to 4) + user.visible_message("[user]'s fangs pierce into [target]'s neck at an odd, awkward angle!") + to_chat(target, "Your neck feels like it's on fire before going numb!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + if(5) + user.visible_message("[user] sinks \his [pick(attack_noun)] deep into [target]'s neck, causing the vein to bulge outwards at some type of chemical is pumped into it!") + to_chat(target, "Your neck feels like it's going to burst! Moments later, you simply can't feel your neck any longer, the numbness beginning to spread throughout your body!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + else + // ----- BODY ----- // + switch(attack_damage) + if(1 to 2) + user.visible_message("[user]'s fangs scrape across [target]'s [affecting.name]!") + to_chat(target, "Your [affecting.name] feels tingly!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + if(3 to 4) + user.visible_message("[user]'s fangs pierce [pick("", "", "the side of")] [target]'s [affecting.name]!") + to_chat(target, "Your [affecting.name] feels like it's on fire before going numb!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + if(5) + user.visible_message("[user]'s fangs sink deep into [target]'s [affecting.name], one of their veins bulging outwards from the sudden fluid pumped into it!") + to_chat(target, "Your [affecting.name] feels like it's going to burst! Moments later, you simply can't feel your [affecting.name] any longer, the numbness slowly spreading throughout your body!") + target.bloodstr.add_reagent("numbenzyme",attack_damage) + +/datum/unarmed_attack/claws/shadekin + +/datum/unarmed_attack/claws/shadekin/apply_effects(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + ..() + if(!(target == user)) + user.shadekin_adjust_energy(attack_damage) + +/datum/unarmed_attack/bite/sharp/shadekin + +/datum/unarmed_attack/bite/sharp/shadekin/apply_effects(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) + ..() + if(!(target == user)) + user.shadekin_adjust_energy(attack_damage) + +/datum/unarmed_attack/claws/chimera //special feral attack that gets stronger as they get angrier + +/datum/unarmed_attack/claws/chimera/get_unarmed_damage(var/mob/living/carbon/human/user) + return user.feral/5 + +/datum/unarmed_attack/claws/chimera/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone) + ..() + if(user.feral && !(target == user)) + var/selfdamage = ((user.feral/10)-7.5) + if(selfdamage > 0) + var/selfdamagezone = null + if (user.hand) + selfdamagezone=pick(BP_L_ARM, BP_L_HAND) + else + selfdamagezone=pick(BP_R_ARM, BP_R_HAND) + user.apply_damage(selfdamage, BRUTE, selfdamagezone, 0, 0, sharp=FALSE, edge=FALSE) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/species_getters.dm b/code/modules/mob/living/carbon/human/species/species_getters.dm index bcb9de1f29..27bb09baa6 100644 --- a/code/modules/mob/living/carbon/human/species/species_getters.dm +++ b/code/modules/mob/living/carbon/human/species/species_getters.dm @@ -103,8 +103,10 @@ if(!name_language) if(gender == FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - else + else if(gender == MALE) return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + else + return capitalize(prob(50) ? pick(first_names_male) : pick(first_names_female)) + " " + capitalize(pick(last_names)) var/datum/language/species_language = GLOB.all_languages[name_language] if(!species_language) diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index 9d8703d617..ceb8a026d2 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -16,6 +16,8 @@ var/base_species = null // Unused outside of a few species var/selects_bodytype = FALSE // Allows the species to choose from body types like custom species can, affecting suit fitting and etcetera as you would expect. + var/bloodsucker = FALSE // Allows safely getting nutrition from blood. + var/is_weaver = FALSE var/silk_production = FALSE var/silk_reserve = 100 @@ -25,6 +27,12 @@ var/list/traits = list() //Vars that need to be copied when producing a copy of species. var/list/copy_vars = list("base_species", "icobase", "deform", "tail", "tail_animation", "icobase_tail", "color_mult", "primitive_form", "appearance_flags", "flesh_color", "base_color", "blood_mask", "damage_mask", "damage_overlays", "move_trail", "has_floating_eyes") + var/trait_points = 0 + + var/micro_size_mod = 0 // How different is our size for interactions that involve us being small? + var/macro_size_mod = 0 // How different is our size for interactions that involve us being big? + var/digestion_nutrition_modifier = 1 + /datum/species/proc/give_numbing_bite() //Holy SHIT this is hacky, but it works. Updating a mob's attacks mid game is insane. unarmed_attacks = list() @@ -48,6 +56,7 @@ ASSERT(src) ASSERT(istype(H)) var/datum/species/new_copy = new src.type() + new_copy.race_key = race_key if(selects_bodytype && custom_base) //If race selects a bodytype, retrieve the custom_base species and copy needed variables. var/datum/species/S = GLOB.all_species[custom_base] diff --git a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm index 2962b30fc5..e33a98502e 100644 --- a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm @@ -46,6 +46,8 @@ BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right, "descriptor" = "right foot") ) + trait_points = 2 + /datum/species/custom/update_sort_hint() sort_hint = SPECIES_SORT_CUSTOM diff --git a/code/modules/mob/living/carbon/human/species/station/greyYW.dm b/code/modules/mob/living/carbon/human/species/station/greyYW.dm index 9af9993677..b392691a28 100644 --- a/code/modules/mob/living/carbon/human/species/station/greyYW.dm +++ b/code/modules/mob/living/carbon/human/species/station/greyYW.dm @@ -19,7 +19,7 @@ species_language = LANGUAGE_PSIONIC secondary_langs = list(LANGUAGE_PSIONIC) name_language = null // Use the first-name last-name generator rather than a language scrambler - assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) + assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) flesh_color = "#a598ad" blood_color = "#A200FF" brute_mod = 1.25 diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm index 8941847b20..d4419deb43 100644 --- a/code/modules/mob/living/carbon/human/species/station/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm @@ -9,7 +9,7 @@ damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi' blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi' language = null - default_language = "Chimpanzee" + default_language = LANGUAGE_ANIMAL greater_form = SPECIES_HUMAN mob_size = MOB_SMALL has_fine_manipulation = 0 @@ -78,7 +78,7 @@ deform = 'icons/mob/human_races/monkeys/r_farwa.dmi' greater_form = SPECIES_TAJ - default_language = "Farwa" + default_language = LANGUAGE_ANIMAL flesh_color = "#AFA59E" base_color = "#333333" tail = "farwatail" @@ -91,7 +91,7 @@ deform = 'icons/mob/human_races/monkeys/r_neaera.dmi' greater_form = SPECIES_SKRELL - default_language = "Neaera" + default_language = LANGUAGE_ANIMAL flesh_color = "#8CD7A3" blood_color = "#1D2CBF" reagent_tag = IS_SKRELL @@ -106,7 +106,7 @@ tail = "stoktail" greater_form = SPECIES_UNATHI - default_language = "Stok" + default_language = LANGUAGE_ANIMAL flesh_color = "#34AF10" base_color = "#066000" reagent_tag = IS_UNATHI diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index a43dfc5bd7..5ff11b6c9c 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -13,7 +13,7 @@ species_language = LANGUAGE_SOL_COMMON secondary_langs = list(LANGUAGE_SOL_COMMON, LANGUAGE_TERMINUS) name_language = null // Use the first-name last-name generator rather than a language scrambler - assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) + assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) min_age = 18 max_age = 130 @@ -398,7 +398,7 @@ taste_sensitivity = TASTE_SENSITIVE num_alternate_languages = 3 secondary_langs = list(LANGUAGE_ZADDAT, LANGUAGE_UNATHI) - assisted_langs = list(LANGUAGE_EAL, LANGUAGE_TERMINUS, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_SOL_COMMON, LANGUAGE_AKHANI, LANGUAGE_SIIK, LANGUAGE_GUTTER) //limited vocal range; can talk Unathi and magical Galcom but not much else + assisted_langs = list(LANGUAGE_EAL, LANGUAGE_TERMINUS, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_SOL_COMMON, LANGUAGE_AKHANI, LANGUAGE_SIIK, LANGUAGE_GUTTER) //limited vocal range; can talk Unathi and magical Galcom but not much else name_language = LANGUAGE_ZADDAT species_language = LANGUAGE_ZADDAT health_hud_intensity = 2.5 @@ -522,7 +522,7 @@ health_hud_intensity = 2.5 item_slowdown_mod = 0.1 - num_alternate_languages = 2 + num_alternate_languages = 3 name_language = LANGUAGE_ROOTLOCAL species_language = LANGUAGE_ROOTLOCAL secondary_langs = list(LANGUAGE_ROOTGLOBAL) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index 2c5bd8f186..bce4336830 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -3,10 +3,18 @@ set category = "Abilities" // Sanity is mostly handled in chimera_regenerate() - - var/confirm = tgui_alert(usr, "Are you sure you want to completely reconstruct your form? This process can take up to twenty minutes, depending on how hungry you are, and you will be unable to move.", "Confirm Regeneration", list("Yes", "No")) - if(confirm == "Yes") - chimera_regenerate() + if(stat == DEAD) + var/confirm = tgui_alert(usr, "Are you sure you want to regenerate your corpse? This process can take up to thirty minutes.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + chimera_regenerate() + else if (quickcheckuninjured()) + var/confirm = tgui_alert(usr, "Are you sure you want to regenerate? As you are uninjured this will only take 30 seconds and match your appearance to your character slot.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + chimera_regenerate() + else + var/confirm = tgui_alert(usr, "Are you sure you want to completely reconstruct your form? This process can take up to fifteen minutes, depending on how hungry you are, and you will be unable to move.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + chimera_regenerate() /mob/living/carbon/human/proc/chimera_regenerate() //If they're already regenerating @@ -21,40 +29,40 @@ to_chat(src, "You can't use that ability again so soon!") return - var/nutrition_used = nutrition * 0.5 - var/time = (240+960/(1 + nutrition_used/75)) + var/time = min(900, (120+780/(1 + nutrition/100))) //capped at 15 mins, roughly 6 minutes at 250 (yellow) nutrition, 4.1 minutes at 500 (grey), cannot be below 2 mins + if (quickcheckuninjured()) //if you're completely uninjured, then you get a speedymode - check health first for quickness + time = 30 //Clicked regen while dead. if(stat == DEAD) - //Has nutrition and dead, allow regen. - if(hasnutriment()) - to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.") + //reviving from dead takes extra nutriment to be provided from outside OR takes twice as long and consumes extra at the end + if(!hasnutriment()) + time = time*2 - //Scary spawnerization. - revive_ready = REVIVING_NOW - revive_finished = (world.time + time SECONDS) // When do we finish reviving? Allows us to find out when we're done, called by the alert currently. - throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution) - spawn(time SECONDS) - // Was dead, now not dead. - if(stat != DEAD) - to_chat(src, "Your body has recovered from its ordeal, ready to regenerate itself again.") - revive_ready = REVIVING_READY //reset their cooldown - clear_alert("regen") - throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) + to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.") - // Was dead, still dead. - else - to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch.") - verbs |= /mob/living/carbon/human/proc/hatch - revive_ready = REVIVING_DONE - src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) - clear_alert("regen") - throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) + //Scary spawnerization. + revive_ready = REVIVING_NOW + revive_finished = (world.time + time SECONDS) // When do we finish reviving? Allows us to find out when we're done, called by the alert currently. + throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution) + spawn(time SECONDS) + // check to see if they've been fixed by outside forces in the meantime such as defibbing + if(stat != DEAD) + to_chat(src, "Your body has recovered from its ordeal, ready to regenerate itself again.") + revive_ready = REVIVING_READY //reset their cooldown + clear_alert("regen") + throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) + + // Was dead, still dead. + else + to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch.") + verbs |= /mob/living/carbon/human/proc/hatch + revive_ready = REVIVING_DONE + src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) + clear_alert("regen") + throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) - //Dead until nutrition injected. - else - to_chat(src, "Your body is too damaged to regenerate without additional nutrients to feed what few living cells remain.") //Clicked regen while NOT dead else @@ -66,29 +74,17 @@ throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution) spawn(time SECONDS) - //If they're still alive after regenning. - if(stat != DEAD) + //Slightly different flavour messages + if(stat != DEAD || hasnutriment()) to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch..") - verbs |= /mob/living/carbon/human/proc/hatch - revive_ready = REVIVING_DONE - src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) - clear_alert("regen") - throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) - - //Was alive, now dead - else if(hasnutriment()) - to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch..") - verbs |= /mob/living/carbon/human/proc/hatch - revive_ready = REVIVING_DONE - src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) - clear_alert("regen") - throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) - - //Dead until nutrition injected. else - to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.") - revive_ready = REVIVING_READY //reset their cooldown - clear_alert("regen") + to_chat(src, "Consciousness begins to stir as your battered body struggles to recover from its ordeal..") + verbs |= /mob/living/carbon/human/proc/hatch + revive_ready = REVIVING_DONE + src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) + clear_alert("regen") + throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) + /mob/living/carbon/human/proc/hasnutriment() if (bloodstr.has_reagent("nutriment", 30) || src.bloodstr.has_reagent("protein", 15)) //protein needs half as much. For reference, a steak contains 9u protein. @@ -97,6 +93,16 @@ return TRUE else return FALSE +/mob/living/carbon/human/proc/quickcheckuninjured() + if (getBruteLoss() || getFireLoss() || getHalLoss() || getToxLoss() || getOxyLoss() || getBrainLoss()) //fails if they have any of the main damage types + return FALSE + for (var/obj/item/organ/O in organs) //check their organs just in case they're being sneaky and somehow have organ damage but no health damage + if (O.damage) + return FALSE + for (var/obj/item/organ/O in internal_organs) //check their organs just in case they're being sneaky and somehow have organ damage but no health damage + if (O.damage) + return FALSE + return TRUE /mob/living/carbon/human/proc/hatch() set name = "Hatch" @@ -112,59 +118,54 @@ //Dead when hatching if(stat == DEAD) - //Check again for nutriment (necessary?) - if(hasnutriment()) - chimera_hatch() - adjustBrainLoss(10) // if they're reviving from dead, they come back with 10 brainloss on top of whatever's unhealed. - visible_message("

    The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.

    ") //Bloody hell... - clear_alert("hatch") - return - - //Don't have nutriment to hatch! Or you somehow died in between completing your revive and hitting hatch. - else - to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.") - verbs -= /mob/living/carbon/human/proc/hatch - revive_ready = REVIVING_READY //reset their cooldown they can try again when they're given a kickstart - clear_alert("hatch") + //Reviving from ded takes extra nutrition - if it isn't provided from outside sources, it comes from you + if(!hasnutriment()) + nutrition=nutrition * 0.75 + chimera_hatch() + adjustBrainLoss(5) // if they're reviving from dead, they come back with 5 brainloss on top of whatever's unhealed. + visible_message("

    The former corpse staggers to its feet, all its former wounds having vanished...

    ") //Bloody hell... + clear_alert("hatch") + return //Alive when hatching else chimera_hatch() - visible_message("

    The dormant husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.

    ") //Bloody hell... + + visible_message("

    [src] rises to \his feet.

    ") //Bloody hell... clear_alert("hatch") /mob/living/carbon/human/proc/chimera_hatch() verbs -= /mob/living/carbon/human/proc/hatch to_chat(src, "Your new body awakens, bursting free from your old skin.") - //Modify and record values (half nutrition and braindamage) - var/old_nutrition = nutrition * 0.5 - var/braindamage = (brainloss * 0.5) //Can only heal half brain damage. - + var/old_nutrition = nutrition + var/braindamage = min(5, max(0, (brainloss-1) * 0.5)) //brainloss is tricky to heal and might take a couple of goes to get rid of completely. + var/uninjured=quickcheckuninjured() //I did have special snowflake code, but this is easier. revive() mutations.Remove(HUSK) - nutrition = old_nutrition setBrainLoss(braindamage) - //Drop everything - for(var/obj/item/W in src) - drop_from_inventory(W) + if(!uninjured) + nutrition = old_nutrition * 0.5 + //Drop everything + for(var/obj/item/W in src) + drop_from_inventory(W) + //Visual effects + var/T = get_turf(src) + var/blood_color = species.blood_color + var/flesh_color = species.flesh_color + new /obj/effect/gibspawner/human/xenochimera(T, null, flesh_color, blood_color) + visible_message("

    The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.

    ") //Bloody hell... + playsound(T, 'sound/effects/mob_effects/xenochimera/hatch.ogg', 50) + else //lower cost for doing a quick cosmetic revive + nutrition = old_nutrition * 0.9 //Unfreeze some things does_not_breathe = FALSE update_canmove() weakened = 2 - //Visual effects - // CHOMPEdit Start: Tweaks Gibspawner to inherit color from prior - var/T = get_turf(src) - var/blood_color = species.blood_color - var/flesh_color = species.flesh_color - new /obj/effect/gibspawner/human/xenochimera(T, null, flesh_color, blood_color) - - playsound(T, 'sound/effects/mob_effects/xenochimera/hatch.ogg', 50) - revive_ready = world.time + 10 MINUTES //set the cooldown CHOMPEdit: Reduced this to 10 minutes, you're playing with fire if you're reviving that often. /mob/living/carbon/human/proc/revivingreset() // keep this as a debug proc or potential future use @@ -1063,4 +1064,4 @@ C.icon_scale_y = 0.25 * C.w_class C.update_transform() //egg_contents -= src - C.contents -= src \ No newline at end of file + C.contents -= src diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index 675da1d92d..e736ee29f4 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -9,7 +9,7 @@ name_plural = "Xenochimeras" icobase = 'icons/mob/human_races/r_xenochimera.dmi' deform = 'icons/mob/human_races/r_def_xenochimera.dmi' - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/chimera, /datum/unarmed_attack/bite/sharp) darksight = 8 //critters with instincts to hide in the dark need to see in the dark - about as good as tajara. slowdown = -0.2 //scuttly, but not as scuttly as a tajara or a teshari. brute_mod = 0.8 //About as tanky to brute as a Unathi. They'll probably snap and go feral when hurt though. @@ -17,7 +17,7 @@ base_species = "Xenochimera" selects_bodytype = TRUE - num_alternate_languages = 2 + num_alternate_languages = 3 secondary_langs = list("Sol Common") //color_mult = 1 //It seemed to work fine in testing, but I've been informed it's unneeded. tail = "tail" //Scree's tail. Can be disabled in the vore tab by choosing "hide species specific tail sprite" @@ -61,13 +61,13 @@ genders = list(MALE, FEMALE, PLURAL, NEUTER) - has_organ = list( //Same organ list as tajarans. + has_organ = list( //Same organ list as tajarans, except for their SPECIAL BRAIN. O_HEART = /obj/item/organ/internal/heart, O_LUNGS = /obj/item/organ/internal/lungs, O_VOICE = /obj/item/organ/internal/voicebox, O_LIVER = /obj/item/organ/internal/liver, O_KIDNEYS = /obj/item/organ/internal/kidneys, - O_BRAIN = /obj/item/organ/internal/brain, + O_BRAIN = /obj/item/organ/internal/brain/xenochimera, O_EYES = /obj/item/organ/internal/eyes, O_STOMACH = /obj/item/organ/internal/stomach, O_INTESTINE = /obj/item/organ/internal/intestine @@ -103,6 +103,9 @@ //Very low pressure damage if(adjusted_pressure2 <= 20) H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") + //they handle areas where they can't breathe better than most, but it still lowers their effective health as well as all the other bad stuff that comes with unbreathable environments + if(H.getOxyLoss() >= 50) + H.does_not_breathe = TRUE //Cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral. //NB: 'body_temperature' used here is the 'setpoint' species var @@ -111,17 +114,24 @@ H.shock_stage = min(H.shock_stage + (temp_diff/20), 160) // Divided by 20 is the same as previous numbers, but a full scale H.eye_blurry = max(5,H.eye_blurry) +/obj/item/organ/internal/brain/xenochimera + var/laststress = 0 /datum/species/xenochimera/proc/handle_feralness(var/mob/living/carbon/human/H) + //first, calculate how stressed the chimera is + var/laststress = 0 + var/obj/item/organ/internal/brain/xenochimera/B = H.internal_organs_by_name[O_BRAIN] + if(B) //if you don't have a chimera brain in a chimera body somehow, you don't get the feraless protection + laststress = B.laststress - //Low-ish nutrition has messages and eventually feral - var/hungry = H.nutrition <= 200 + //Low-ish nutrition has messages and can eventually cause feralness + var/hunger = max(0, 150 - H.nutrition) - //At 360 nutrition, this is 30 brute/burn, or 18 halloss. Capped at 50 brute/30 halloss - if they take THAT much, no amount of satiation will help them. Also they're fat. - var/shock = H.traumatic_shock > min(60, H.nutrition/10) + //pain makes feralness a thing + var/shock = 0.75*H.traumatic_shock - //Caffeinated xenochimera can become feral and have special messages - var/jittery = H.jitteriness >= 100 + //Caffeinated or otherwise overexcited xenochimera can become feral and have special messages + var/jittery = max(0, H.jitteriness - 100) //To reduce distant object references var/feral = H.feral @@ -130,11 +140,25 @@ var/danger = FALSE var/feral_state = FALSE - //Handle feral triggers and pre-feral messages - if(!feral && (hungry || shock || jittery)) + //finally, calculate the current stress total the chimera is operating under, and the cause + var/currentstress = (hunger + shock + jittery) + var/cause = "stress" + if(hunger > shock && hunger > jittery) + cause = "hunger" + else if (shock > hunger && shock > jittery) + cause = "shock" + else if (jittery > shock && jittery > hunger) + cause = "jittery" - // If they're hungry, give nag messages (when not bellied) - if(H.nutrition >= 100 && prob(0.5) && !isbelly(H.loc)) + //check to see if they go feral if they weren't before + if(!feral) + // if stress is below 15, no chance of snapping. Also if they weren't feral before, they won't suddenly become feral unless they get MORE stressed + if((currentstress > laststress) && prob(clamp(currentstress-15, 0, 100)) ) + go_feral(H, currentstress, cause) + feral = currentstress //update the local var + + //they didn't go feral, give 'em a chance of hunger messages + else if(H.nutrition <= 200 && prob(0.5) && !isbelly(H.loc)) switch(H.nutrition) if(150 to 200) to_chat(H,"You feel rather hungry. It might be a good idea to find some some food...") @@ -142,81 +166,26 @@ to_chat(H,"You feel like you're going to snap and give in to your hunger soon... It would be for the best to find some [pick("food","prey")] to eat...") danger = TRUE - // Going feral due to hunger - else if(H.nutrition < 100 && !isbelly(H.loc)) - to_chat(H,"Something in your mind flips, your instincts taking over, no longer able to fully comprehend your surroundings as survival becomes your primary concern - you must feed, survive, there is nothing else. Hunt. Eat. Hide. Repeat.") - log_and_message_admins("has gone feral due to hunger.", H) - feral = 5 - danger = TRUE - feral_state = TRUE - if(!H.stat) - H.emote("twitch") - - // If they're hurt, chance of snapping. - else if(shock) - - //If the majority of their shock is due to halloss, greater chance of snapping. - if(2.5*H.halloss >= H.traumatic_shock) - if(prob(min(10,(0.2 * H.traumatic_shock)))) - to_chat(H,"The pain! It stings! Got to get away! Your instincts take over, urging you to flee, to hide, to go to ground, get away from here...") - log_and_message_admins("has gone feral due to halloss.", H) - feral = 5 - danger = TRUE - feral_state = TRUE - if(!H.stat) - H.emote("twitch") - - //Majority due to other damage sources - else if(prob(min(10,(0.1 * H.traumatic_shock)))) - to_chat(H,"Your fight-or-flight response kicks in, your injuries too much to simply ignore - you need to flee, to hide, survive at all costs - or destroy whatever is threatening you.") - feral = 5 - danger = TRUE - feral_state = TRUE - log_and_message_admins("has gone feral due to injury.", H) - if(!H.stat) - H.emote("twitch") - - //No hungry or shock, but jittery - else if(jittery) - to_chat(H,"Suddenly, something flips - everything that moves is... potential prey. A plaything. This is great! Time to hunt!") - feral = 5 - danger = TRUE - feral_state = TRUE - log_and_message_admins("has gone feral due to jitteriness.", H) - if(!H.stat) - H.emote("twitch") + //now the check's done, update their brain so it remembers how stressed they were + B.laststress = currentstress // Handle being feral if(feral) //We're feral feral_state = TRUE - //Shock due to mostly halloss. More feral. - if(shock && 2.5*H.halloss >= H.traumatic_shock) + //If they're still stressed, they stay feral + if(currentstress >= 15) danger = TRUE - feral = max(feral, H.halloss) + feral = max(feral, currentstress) - //Shock due to mostly injury. More feral. - else if(shock) - danger = TRUE - feral = max(feral, H.traumatic_shock * 2) - - //Still jittery? More feral. - if(jittery) - danger = TRUE - feral = max(feral, H.jitteriness-100) - - //Still hungry? More feral. - if(H.feral + H.nutrition < 150) - danger = TRUE - feral++ else feral = max(0,--feral) - // Being in a belly or in the darkness decreases stress further. Helps mechanically reward players for staying in darkness + RP'ing appropriately. :9 - var/turf/T = get_turf(H) - if(feral && (isbelly(H.loc) || T.get_lumcount() <= 0.1)) - feral = max(0,--feral) + // Being in a belly or in the darkness decreases stress further. Helps mechanically reward players for staying in darkness + RP'ing appropriately. :9 + var/turf/T = get_turf(H) + if(feral && (isbelly(H.loc) || T.get_lumcount() <= 0.1)) + feral = max(0,--feral) //Set our real mob's var to our temp var H.feral = feral @@ -233,7 +202,7 @@ H.shock_stage = max(H.shock_stage-(feral/20), 0) //Handle light/dark areas - // var/turf/T = get_turf(H) // Moved up to before the in-belly/dark combined check, should still safely reach here just fine. + var/turf/T = get_turf(H) if(!T) update_xenochimera_hud(H, danger, feral_state) return //Nullspace @@ -263,15 +232,15 @@ // In the darkness, or "hidden", or in a belly. No need for custom scene-protection checks as it's just an occational infomessage. if(darkish || !isturf(H.loc) || isbelly(H.loc)) // Specific check for if in belly. !isturf should do this, but JUST in case. // If hurt, tell 'em to heal up - if (shock) + if (cause == "shock") to_chat(H,"This place seems safe, secure, hidden, a place to lick your wounds and recover...") //If hungry, nag them to go and find someone or something to eat. - else if(hungry) + else if(cause == "hunger") to_chat(H,"Secure in your hiding place, your hunger still gnaws at you. You need to catch some food...") //If jittery, etc - else if(jittery) + else if(cause == "jittery") to_chat(H,"sneakysneakyyesyesyescleverhidingfindthingsyessssss") //Otherwise, just tell them to keep hiding. @@ -290,16 +259,16 @@ // Someone/something nearby if(nearby.len) var/M = pick(nearby) - if(shock) + if(cause == "shock") to_chat(H,"You're hurt, in danger, exposed, and [M] looks to be a little too close for comfort...") - else if(hungry || jittery) + else to_chat(H,"Every movement, every flick, every sight and sound has your full attention, your hunting instincts on high alert... In fact, [M] looks extremely appetizing...") // Nobody around else - if(hungry) + if(cause == "hunger") to_chat(H,"Confusing sights and sounds and smells surround you - scary and disorienting it may be, but the drive to hunt, to feed, to survive, compels you.") - else if(jittery) + else if(cause == "jittery") to_chat(H,"yesyesyesyesyesyesgetthethingGETTHETHINGfindfoodsfindpreypounceyesyesyes") else to_chat(H,"Confusing sights and sounds and smells surround you, this place is wrong, confusing, frightening. You need to hide, go to ground...") @@ -307,6 +276,37 @@ // HUD update time update_xenochimera_hud(H, danger, feral_state) +/datum/species/xenochimera/proc/go_feral(var/mob/living/carbon/human/H, var/stress, var/cause) + // Going feral due to hunger + if(cause == "hunger") + to_chat(H,"Something in your mind flips, your instincts taking over, no longer able to fully comprehend your surroundings as survival becomes your primary concern - you must feed, survive, there is nothing else. Hunt. Eat. Hide. Repeat.") + log_and_message_admins("has gone feral due to hunger.", H) + + // If they're hurt, chance of snapping. + else if(cause == "shock") + //If the majority of their shock is due to halloss, give them a different message (3x multiplier on check as halloss is 2x - meaning t_s must be at least 3x for other damage sources to be the greater part) + if(3*H.halloss >= H.traumatic_shock) + to_chat(H,"The pain! It stings! Got to get away! Your instincts take over, urging you to flee, to hide, to go to ground, get away from here...") + log_and_message_admins("has gone feral due to halloss.", H) + + //Majority due to other damage sources + else + to_chat(H,"Your fight-or-flight response kicks in, your injuries too much to simply ignore - you need to flee, to hide, survive at all costs - or destroy whatever is threatening you.") + log_and_message_admins("has gone feral due to injury.", H) + + //No hungry or shock, but jittery + else if(cause == "jittery") + to_chat(H,"Suddenly, something flips - everything that moves is... potential prey. A plaything. This is great! Time to hunt!") + log_and_message_admins("has gone feral due to jitteriness.", H) + + else // catch-all just in case something weird happens + to_chat(H,"The stress of your situation is too much for you, and your survival instincts kick in!") + log_and_message_admins("has gone feral for unknown reasons.", H) + //finally, set their feral var + H.feral = stress + if(!H.stat) + H.emote("twitch") + /datum/species/xenochimera/get_race_key() var/datum/species/real = GLOB.all_species[base_species] return real.race_key @@ -339,7 +339,7 @@ brute_mod = 0.8 //20% brute damage reduction burn_mod = 1.15 //15% burn damage increase. They're spiders. Aerosol can+lighter = dead spiders. - num_alternate_languages = 2 + num_alternate_languages = 3 secondary_langs = list(LANGUAGE_VESPINAE) color_mult = 1 tail = "tail" //Spider tail. diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm index cc283b4e7d..f53ff7c588 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm @@ -187,7 +187,7 @@ inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds, /mob/living/proc/shred_limb, /mob/living/carbon/human/proc/tie_hair) - assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //AEIOU edit: Zorren can speak Terminus unassisted. + assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //AEIOU edit: Zorren can speak Terminus unassisted. min_age = 18 max_age = 110 @@ -587,7 +587,7 @@ unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) darksight = 4 //Better hunters in the dark. hunger_factor = 0.1 //In exchange, they get hungry a tad faster. - num_alternate_languages = 2 + num_alternate_languages = 3 min_age = 18 max_age = 80 @@ -617,3 +617,60 @@ "You feel uncomfortably warm.", "Your chitin feels hot." ) + +/datum/species/altevian + name = SPECIES_ALTEVIAN + name_plural = "Altevians" + icobase = 'icons/mob/human_races/r_altevian.dmi' + deform = 'icons/mob/human_races/r_def_altevian.dmi' + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) + language = LANGUAGE_TAVAN + num_alternate_languages = 3 + secondary_langs = list(LANGUAGE_TAVAN) + name_language = null + color_mult = 1 + inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) + + min_age = 18 + max_age = 80 + + blurb = "The Altevian are a species of tall, rodent humanoids that are akin to rats for their features. \ + The Altevian, unlike most species, do not have a home planet, nor system, adopting a fully nomadic lifestyle \ + for their survival across the stars. Instead, they have opted to live in massive super capital-class colony-ships \ + with a flagship as their place they would call home." + + // wikilink="https://wiki.vore-station.net/Altevian" //CHOMPedit + + catalogue_data = list(/datum/category_item/catalogue/fauna/altevian) + + spawn_flags = SPECIES_CAN_JOIN + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + + flesh_color = "#AFA59E" + base_color = "#777777" + + genders = list(MALE, FEMALE, PLURAL, NEUTER) + + burn_mod = 1.15 + hunger_factor = 0.04 + can_zero_g_move = TRUE + + heat_discomfort_strings = list( + "Your fur prickles in the heat.", + "You feel uncomfortably warm.", + "Your overheated skin itches." + ) + + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/_traits.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/_traits.dm new file mode 100644 index 0000000000..6abec0e517 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/_traits.dm @@ -0,0 +1,7 @@ +#define TRAIT_TYPE_NEGATIVE -1 +#define TRAIT_TYPE_NEUTRAL 0 +#define TRAIT_TYPE_POSITIVE 1 + +#define TRAIT_VARCHANGE_LESS_BETTER -1 +#define TRAIT_VARCHANGE_ALWAYS_OVERRIDE 0 +#define TRAIT_VARCHANGE_MORE_BETTER 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm index 90cf90f7ea..7c01fd47f7 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm @@ -1,5 +1,5 @@ /datum/trait/negative - category = -1 + category = TRAIT_TYPE_NEGATIVE /datum/trait/negative/speed_slow name = "Slowdown" @@ -92,6 +92,8 @@ desc = "Increases your susceptibility to electric shocks by 100%" cost = -3 //CHOMPEdit var_changes = list("siemens_coefficient" = 2.0) //This makes you extremely weak to tasers. + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_LESS_BETTER /datum/trait/negative/haemophilia name = "Haemophilia" // CHOMPEdit: Trait List Organization @@ -99,6 +101,8 @@ cost = -2 var_changes = list("bloodloss_rate" = 2) can_take = ORGANICS + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_LESS_BETTER /datum/trait/negative/hollow name = "Hollow Bones/Aluminum Alloy" @@ -116,6 +120,7 @@ desc = "Your light weight and poor balance make you very susceptible to unhelpful bumping. Think of it like a bowling ball versus a pin. (STOP TAKING THIS AS SECURITY! We're MRP, so expect to lose your junk immediately, especially in events. - Love, Admins)" //CHOMP Edit btw cost = -2 var_changes = list("lightweight" = 1) + custom_only = FALSE /datum/trait/negative/neural_hypersensitivity name = "Neural Hypersensitivity" @@ -137,3 +142,37 @@ name = "Nitrogen Breather" desc = "You breathe nitrogen instead of oxygen (which is poisonous to you). Incidentally, phoron isn't poisonous to breathe to you." var_changes = list("breath_type" = "nitrogen", "poison_type" = "oxygen") + +/datum/trait/negative/monolingual + name = "Monolingual" + desc = "You are not good at learning languages." + cost = -3 + var_changes = list("num_alternate_languages" = 0) + varchange_type = TRAIT_VARCHANGE_MORE_BETTER + +/datum/trait/negative/monolingual + name = "Monolingual" + desc = "You are not good at learning languages." + cost = -1 + var_changes = list("num_alternate_languages" = 0) + var_changes_pref = list("extra_languages" = -3) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER + +/datum/trait/negative/dark_blind + name = "Nyctalopia" + desc = "You cannot see in dark at all." + cost = -1 + var_changes = list("darksight" = 0) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER + +/* // CHOMPedit: commented out because we disabled baymiss so this does nothing. +/datum/trait/negative/bad_shooter + name = "Bad Shot" + desc = "You are terrible at aiming." + cost = -1 + var_changes = list("gun_accuracy_mod" = -35) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER +*/ diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index b6035fe667..6a45bca3e0 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -1,4 +1,5 @@ /datum/trait/neutral + category = TRAIT_TYPE_NEUTRAL /datum/trait/neutral/metabolism_up name = "Metabolism, Fast" @@ -90,8 +91,8 @@ desc = "Makes you unable to gain nutrition from anything but blood. To compensate, you get fangs that can be used to drain blood from prey." cost = 0 custom_only = FALSE - var_changes = list("organic_food_coeff" = 0) //The verb is given in human.dm - excludes = list(/datum/trait/positive/bloodsucker_plus) //YW edit + var_changes = list("organic_food_coeff" = 0, "bloodsucker" = TRUE) //The verb is given in human.dm + excludes = list(/datum/trait/neutral/bloodsucker_freeform, /datum/trait/positive/bloodsucker_plus) //YW edit /datum/trait/neutral/bloodsucker/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) @@ -102,6 +103,7 @@ desc = "You get fangs that can be used to drain blood from prey." cost = 0 custom_only = FALSE + var_changes = list("bloodsucker" = TRUE) excludes = list(/datum/trait/neutral/bloodsucker, /datum/trait/positive/bloodsucker_plus) //YW edit /datum/trait/neutral/bloodsucker_freeform/apply(var/datum/species/S,var/mob/living/carbon/human/H) @@ -542,3 +544,45 @@ /datum/trait/neutral/vertical_nom/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/proc/vertical_nom + +/datum/trait/neutral/micro_size_down + name = "Light Frame" + desc = "You are considered smaller than you are for micro interactions." + cost = 0 + custom_only = FALSE + var_changes = list("micro_size_mod" = -0.15) + +/datum/trait/neutral/micro_size_up + name = "Heavy Frame" + desc = "You are considered bigger than you are for micro interactions." + cost = 0 + custom_only = FALSE + var_changes = list("micro_size_mod" = 0.15) + +/datum/trait/neutral/digestion_value_up + name = "Highly Filling" + desc = "You provide notably more nutrition to anyone who makes a meal of you." + cost = 0 + custom_only = FALSE + var_changes = list("digestion_nutrition_modifier" = 2) + +/datum/trait/neutral/digestion_value_up_plus + name = "Extremely Filling" + desc = "You provide a lot more nutrition to anyone who makes a meal of you." + cost = 0 + custom_only = FALSE + var_changes = list("digestion_nutrition_modifier" = 3) + +/datum/trait/neutral/digestion_value_down + name = "Slightly Filling" + desc = "You provide notably less nutrition to anyone who makes a meal of you." + cost = 0 + custom_only = FALSE + var_changes = list("digestion_nutrition_modifier" = 0.5) + +/datum/trait/neutral/digestion_value_down_plus + name = "Barely Filling" + desc = "You provide a lot less nutrition to anyone who makes a meal of you." + cost = 0 + custom_only = FALSE + var_changes = list("digestion_nutrition_modifier" = 0.25) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm index cc65469af9..be507a7c78 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -1,5 +1,5 @@ /datum/trait/positive - category = 1 + category = TRAIT_TYPE_POSITIVE /datum/trait/positive/speed_fast name = "Haste" @@ -127,6 +127,7 @@ desc = "You can fall from certain heights without suffering any injuries, be it via wings, lightness of frame or general dexterity." cost = 1 var_changes = list("soft_landing" = TRUE) + custom_only = FALSE /datum/trait/positive/hardfeet name = "Hard Feet" @@ -150,6 +151,8 @@ desc = "You're capable of parkour and can *flip over low objects (most of the time)." cost = 1 //CHOMPEdit this is not worth 2 points var_changes = list("agility" = 90) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER /datum/trait/positive/snowwalker name = "Snow Walker" @@ -182,8 +185,28 @@ name = "Cocoon Spinner" desc = "Allows you to build a cocoon around yourself, using it to transform your body if you desire." cost = 1 - //custom_only = FALSE /datum/trait/positive/cocoon_tf/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) - H.verbs |= /mob/living/carbon/human/proc/enter_cocoon \ No newline at end of file + H.verbs |= /mob/living/carbon/human/proc/enter_cocoon + +/* //CHOMPedit: We already have our own version of this trait. +/datum/trait/positive/linguist + name = "Linguist" + desc = "Allows you to have more languages." + cost = 1 + var_changes = list("num_alternate_languages" = 6) + var_changes_pref = list("extra_languages" = 3) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER +*/ + +/* // CHOMPedit: commented out because we disabled baymiss so this does nothing. +/datum/trait/positive/good_shooter + name = "Eagle Eye" + desc = "You are better at aiming than most." + cost = 2 + var_changes = list("gun_accuracy_mod" = 25) + custom_only = FALSE + varchange_type = TRAIT_VARCHANGE_MORE_BETTER +*/ diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_ch.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_ch.dm index 0643aa75f8..342d768b97 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_ch.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive_ch.dm @@ -2,7 +2,8 @@ name = "Master Linguist" desc = "You are a master of languages! For whatever reason you might have, you are able to learn many more languages than others. Your language cap is 12 slots." cost = 2 - var_changes = list("num_alternate_languages" = 12) + var_changes = list("num_alternate_languages" = 15) + var_changes_pref = list("extra_languages" = 12) /datum/trait/positive/darksight name = "Darksight" @@ -354,4 +355,4 @@ /datum/trait/positive/sonar/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) - H.verbs |= /mob/living/carbon/human/proc/sonar_ping \ No newline at end of file + H.verbs |= /mob/living/carbon/human/proc/sonar_ping diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm index 91bf5fafea..03e3966ff9 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/trait.dm @@ -4,23 +4,43 @@ var/cost = 0 var/sort = TRAIT_SORT_NORMAL // Sort order, 1 before 2 before 3 etc. Alphabetical is used for same-group traits. - var/category = 0 // What category this trait is. -1 is Negative, 0 is Neutral, 1 is Positive + var/category = TRAIT_TYPE_NEUTRAL // What category this trait is. -1 is Negative, 0 is Neutral, 1 is Positive var/list/var_changes // A list to apply to the custom species vars. + var/list/var_changes_pref // A list to apply to the preference vars. var/list/excludes // Store a list of paths of traits to exclude, but done automatically if they change the same vars. var/can_take = ORGANICS|SYNTHETICS // Can freaking synths use those. var/list/banned_species // A list of species that can't take this trait var/list/allowed_species // VORESTATION EDIT:chomp port. A list of species that CAN take this trait, use this if only a few species can use it. -shark var/custom_only = TRUE // Trait only available for custom species + var/varchange_type = TRAIT_VARCHANGE_ALWAYS_OVERRIDE //Mostly used for non-custom species. //Proc can be overridden lower to include special changes, make sure to call up though for the vars changes /datum/trait/proc/apply(var/datum/species/S,var/mob/living/carbon/human/H) ASSERT(S) if(var_changes) for(var/V in var_changes) + if((category == TRAIT_TYPE_POSITIVE && ((varchange_type == TRAIT_VARCHANGE_LESS_BETTER && var_changes[V] > S.vars[V]) || (varchange_type == TRAIT_VARCHANGE_MORE_BETTER && var_changes[V] < S.vars[V]))) || (category == TRAIT_TYPE_NEGATIVE && ((varchange_type == TRAIT_VARCHANGE_LESS_BETTER && var_changes[V] < S.vars[V]) || (varchange_type == TRAIT_VARCHANGE_MORE_BETTER && var_changes[V] > S.vars[V])))) + continue S.vars[V] = var_changes[V] return +//Applying trait to preferences rather than just us. +/datum/trait/proc/apply_pref(var/datum/preferences/P) + ASSERT(P) + if(var_changes_pref) + for(var/V in var_changes_pref) + P.vars[V] = var_changes_pref[V] + return + //Similar to the above, but for removing. Probably won't be called often/ever. /datum/trait/proc/remove(var/datum/species/S) ASSERT(S) return + +//Similar to the above, but for removing. +/datum/trait/proc/remove_pref(var/datum/preferences/P) + ASSERT(P) + if(var_changes_pref) + for(var/V in var_changes_pref) + P.vars[V] = initial(P.vars[V]) + return diff --git a/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm b/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm index d7a67b078b..2f2adc4487 100644 --- a/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm @@ -43,6 +43,7 @@ cost = 0 category = 0 custom_only = FALSE + var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/chimera, /datum/unarmed_attack/bite/sharp, /datum/unarmed_attack/bite/sharp/numbing)) // CHOMPEdit: Fix 'chimera unarmed attacks with this trait /datum/trait/positive/snowwalker/xenochimera sort = TRAIT_SORT_SPECIES @@ -61,7 +62,7 @@ cost = 0 category = 0 custom_only = FALSE - + /* // Commented out in lieu of finding a better solution. /datum/trait/neutral/coldadapt/xenochimera sort = TRAIT_SORT_SPECIES diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index a845c90b1d..aede472f22 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -66,7 +66,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define MOB_DAM_LAYER 4 //Injury overlay sprites like open wounds #define SURGERY_LAYER 5 //Overlays for open surgical sites #define UNDERWEAR_LAYER 6 //Underwear/bras/etc -#define TAIL_SOUTH_LAYER 7 //Tail as viewed from the south +#define TAIL_LOWER_LAYER 7 //Tail as viewed from the south #define SHOES_LAYER_ALT 8 //Shoe-slot item (when set to be under uniform via verb) #define UNIFORM_LAYER 9 //Uniform-slot item #define ID_LAYER 10 //ID-slot item @@ -74,7 +74,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define GLOVES_LAYER 12 //Glove-slot item #define BELT_LAYER 13 //Belt-slot item #define SUIT_LAYER 14 //Suit-slot item -#define TAIL_NORTH_LAYER 15 //Some species have tails to render (As viewed from the N, E, or W) +#define TAIL_UPPER_LAYER 15 //Some species have tails to render (As viewed from the N, E, or W) #define GLASSES_LAYER 16 //Eye-slot item #define BELT_LAYER_ALT 17 //Belt-slot item (when set to be above suit via verb) #define SUIT_STORE_LAYER 18 //Suit storage-slot item @@ -90,16 +90,16 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define L_HAND_LAYER 28 //Left-hand item #define R_HAND_LAYER 29 //Right-hand item #define WING_LAYER 30 //Wings or protrusions over the suit. -#define TAIL_NORTH_LAYER_ALT 31 //Modified tail-sprite layer. Tend to be larger. -#define MODIFIER_EFFECTS_LAYER 32 //Effects drawn by modifiers -#define FIRE_LAYER 33 //'Mob on fire' overlay layer -#define MOB_WATER_LAYER 34 //'Mob submerged' overlay layer -#define TARGETED_LAYER 35 //'Aimed at' overlay layer -#define TOTAL_LAYERS 35 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. +#define VORE_BELLY_LAYER 31 //CHOMPStation edit - Move this and everything after up if things are added. +#define VORE_TAIL_LAYER 32 //CHOMPStation edit - Move this and everything after up if things are added. +#define TAIL_UPPER_LAYER_ALT 33 //Modified tail-sprite layer. Tend to be larger. +#define MODIFIER_EFFECTS_LAYER 34 //Effects drawn by modifiers +#define FIRE_LAYER 35 //'Mob on fire' overlay layer +#define MOB_WATER_LAYER 36 //'Mob submerged' overlay layer +#define TARGETED_LAYER 37 //'Aimed at' overlay layer +#define TOTAL_LAYERS 37 //CHOMPStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. ////////////////////////////////// -#define GET_TAIL_LAYER (dir == SOUTH ? TAIL_SOUTH_LAYER : TAIL_NORTH_LAYER) - /mob/living/carbon/human var/list/overlays_standing[TOTAL_LAYERS] var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed @@ -122,10 +122,10 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() // First, get the correct size. var/desired_scale_x = icon_scale_x var/desired_scale_y = icon_scale_y - + desired_scale_x *= species.icon_scale_x desired_scale_y *= species.icon_scale_y - + for(var/datum/modifier/M in modifiers) if(!isnull(M.icon_scale_x_percent)) desired_scale_x *= M.icon_scale_x_percent @@ -146,6 +146,17 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() var/matrix/M = matrix() var/anim_time = 3 + // VOREStation Edit Start: Porting Taur Loafing + if(tail_style?.can_loaf && resting) // Only call these if we're resting? + update_tail_showing() + return // No need to do the rest, we return early + /* // Commenting this out as sleeping is fucky + if(tail_style?.can_loaf && lying && sleeping) // If we're put under by anesthetic or fainting + update_tail_showing() + // return // No need to do the rest, we return early + */ + // VOREStation Edit End + //Due to some involuntary means, you're laying now if(lying && !resting && !sleeping) anim_time = 1 //Thud @@ -165,6 +176,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() else M.Scale(desired_scale_x, desired_scale_y)//VOREStation Edit M.Translate(0, (vis_height/2)*(desired_scale_y-1)) //VOREStation edit + if(tail_style?.can_loaf) // VOREStation Edit: Taur Loafing + update_tail_showing() // VOREStation Edit: Taur Loafing layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters animate(src, transform = M, time = anim_time) @@ -302,7 +315,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(digitigrade && (part.organ_tag == BP_R_LEG || part.organ_tag == BP_L_LEG || part.organ_tag == BP_R_FOOT || part.organ_tag == BP_L_FOOT)) icon_key += "_digi" //ChompEDIT END - + icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]" var/icon/base_icon if(human_icon_cache[icon_key]) @@ -378,6 +391,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //tail update_tail_showing() update_wing_showing() + update_vore_belly_sprite() + update_vore_tail_sprite() /mob/living/carbon/human/proc/update_skin() @@ -813,8 +828,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(ubelt.show_above_suit) belt_layer = BELT_LAYER_ALT + + var/icon/c_mask = tail_style?.clip_mask + //NB: this uses a var from above - overlays_standing[belt_layer] = belt.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_belt_str, default_icon = INV_BELT_DEF_ICON, default_layer = belt_layer) + overlays_standing[belt_layer] = belt.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_belt_str, default_icon = INV_BELT_DEF_ICON, default_layer = belt_layer, clip_mask = c_mask) apply_layer(belt_layer) @@ -842,7 +860,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() suit_sprite = INV_SUIT_DEF_ICON var/icon/c_mask = null - var/tail_is_rendered = (overlays_standing[TAIL_NORTH_LAYER] || overlays_standing[TAIL_NORTH_LAYER_ALT] || overlays_standing[TAIL_SOUTH_LAYER]) + var/tail_is_rendered = (overlays_standing[TAIL_UPPER_LAYER] || overlays_standing[TAIL_UPPER_LAYER_ALT] || overlays_standing[TAIL_LOWER_LAYER]) var/valid_clip_mask = tail_style?.clip_mask if(tail_is_rendered && valid_clip_mask && !(istype(suit) && suit.taurized)) //Clip the lower half of the suit off using the tail's clip mask for taurs since taur bodies aren't hidden. @@ -955,19 +973,29 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() apply_layer(L_HAND_LAYER) +/mob/living/carbon/human/proc/get_tail_layer() + var/list/lower_layer_dirs = list(SOUTH) + if(tail_style) + lower_layer_dirs = tail_style.lower_layer_dirs.Copy() + + if(dir in lower_layer_dirs) + return TAIL_LOWER_LAYER + else + return TAIL_UPPER_LAYER + /mob/living/carbon/human/proc/update_tail_showing() if(QDESTROYING(src)) return - remove_layer(TAIL_NORTH_LAYER) - remove_layer(TAIL_NORTH_LAYER_ALT) - remove_layer(TAIL_SOUTH_LAYER) + remove_layer(TAIL_UPPER_LAYER) + remove_layer(TAIL_UPPER_LAYER_ALT) + remove_layer(TAIL_LOWER_LAYER) - var/tail_layer = GET_TAIL_LAYER - if(tail_alt && tail_layer == TAIL_NORTH_LAYER) - tail_layer = TAIL_NORTH_LAYER_ALT + var/tail_layer = get_tail_layer() if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_SOUTH_LAYER // Use default, let clip mask handle everything + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything + if(tail_alt && tail_layer == TAIL_UPPER_LAYER) + tail_layer = TAIL_UPPER_LAYER_ALT var/image/tail_image = get_tail_image() if(tail_image) @@ -1006,16 +1034,16 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() return tail_icon /mob/living/carbon/human/proc/set_tail_state(var/t_state) - var/tail_layer = GET_TAIL_LAYER - if(tail_alt && tail_layer == TAIL_NORTH_LAYER) - tail_layer = TAIL_NORTH_LAYER_ALT + var/tail_layer = get_tail_layer() if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_SOUTH_LAYER // Use default, let clip mask handle everything + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything + if(tail_alt && tail_layer == TAIL_UPPER_LAYER) + tail_layer = TAIL_UPPER_LAYER_ALT var/image/tail_overlay = overlays_standing[tail_layer] - remove_layer(TAIL_NORTH_LAYER) - remove_layer(TAIL_NORTH_LAYER_ALT) - remove_layer(TAIL_SOUTH_LAYER) + remove_layer(TAIL_UPPER_LAYER) + remove_layer(TAIL_UPPER_LAYER_ALT) + remove_layer(TAIL_LOWER_LAYER) if(tail_overlay) overlays_standing[tail_layer] = tail_overlay @@ -1033,7 +1061,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() return var/t_state = "[species.get_tail(src)]_once" - var/tail_layer = GET_TAIL_LAYER + var/tail_layer = get_tail_layer() + if(src.tail_style && src.tail_style.clip_mask_state) + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything var/image/tail_overlay = overlays_standing[tail_layer] if(tail_overlay && tail_overlay.icon_state == t_state) @@ -1226,11 +1256,13 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //If you have a custom tail selected if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style))) - var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state) + var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style.can_loaf && resting) ? "[tail_style.icon_state]_loaf" : (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) // VOREStation Edit: Taur Loafing + if(tail_style.can_loaf && !is_shifted) + pixel_y = (resting) ? -tail_style.loaf_offset : 0 //move player down, then taur up, to fit the overlays correctly // VOREStation Edit: Taur if(tail_style.do_colouration) tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode) if(tail_style.extra_overlay) - var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay) + var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style?.can_loaf && resting) ? "[tail_style.extra_overlay]_loaf" : tail_style.extra_overlay) // VOREStation Edit: Taur Loafing if(wagging && tail_style.ani_state) overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w) overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) @@ -1260,6 +1292,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(istaurtail(tail_style)) var/datum/sprite_accessory/tail/taur/taurtype = tail_style working.pixel_x = -16 + working.pixel_y = (tail_style.can_loaf && resting) ? tail_style.loaf_offset : 0 // VOREStation Edit: Taur Loafing if(taurtype.can_ride && !riding_datum) riding_datum = new /datum/riding/taur(src) verbs |= /mob/living/carbon/human/proc/taur_mount @@ -1293,9 +1326,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #undef GLOVES_LAYER #undef BELT_LAYER #undef SUIT_LAYER -#undef TAIL_NORTH_LAYER -#undef TAIL_SOUTH_LAYER -#undef GET_TAIL_LAYER +#undef TAIL_UPPER_LAYER +#undef TAIL_LOWER_LAYER #undef GLASSES_LAYER #undef BELT_LAYER_ALT #undef SUIT_STORE_LAYER @@ -1309,6 +1341,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #undef LEGCUFF_LAYER #undef L_HAND_LAYER #undef R_HAND_LAYER +#undef VORE_BELLY_LAYER #undef MODIFIER_EFFECTS_LAYER #undef FIRE_LAYER #undef WATER_LAYER diff --git a/code/modules/mob/living/carbon/human/update_icons_ch.dm b/code/modules/mob/living/carbon/human/update_icons_ch.dm deleted file mode 100644 index 67f2f80d45..0000000000 --- a/code/modules/mob/living/carbon/human/update_icons_ch.dm +++ /dev/null @@ -1,39 +0,0 @@ -// Expand shoe layer to allow changing the icon for digi legs -// For some reason, suit and uniform already has this funcitonality, but shoes do not. - -#define SHOES_LAYER_ALT 7 //Shoe-slot item (when set to be under uniform via verb) -#define SHOES_LAYER 10 //Shoe-slot item - -/mob/living/carbon/human/update_inv_shoes() - //. = ..() - remove_layer(SHOES_LAYER) - remove_layer(SHOES_LAYER_ALT) //Dumb alternate layer for shoes being under the uniform. - - if(!shoes || (wear_suit && wear_suit.flags_inv & HIDESHOES) || (w_uniform && w_uniform.flags_inv & HIDESHOES)) - return //Either nothing to draw, or it'd be hidden. - - for(var/f in list(BP_L_FOOT, BP_R_FOOT)) - var/obj/item/organ/external/foot/foot = get_organ(f) - if(istype(foot) && foot.is_hidden_by_tail()) //If either foot is hidden by the tail, don't render footwear. - return - - var/obj/item/clothing/shoes/shoe = shoes - var/shoe_sprite - - if(istype(shoe) && !isnull(shoe.update_icon_define)) - shoe_sprite = shoe.update_icon_define - else - shoe_sprite = INV_FEET_DEF_ICON - - //Allow for shoe layer toggle nonsense - var/shoe_layer = SHOES_LAYER - if(istype(shoes, /obj/item/clothing/shoes)) - var/obj/item/clothing/shoes/ushoes = shoes - if(ushoes.shoes_under_pants == 1) - shoe_layer = SHOES_LAYER_ALT - - //NB: the use of a var for the layer on this one - overlays_standing[shoe_layer] = shoes.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_shoes_str, default_icon = shoe_sprite, default_layer = shoe_layer) - - apply_layer(SHOES_LAYER) - apply_layer(SHOES_LAYER_ALT) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/lick_wounds.dm b/code/modules/mob/living/carbon/lick_wounds.dm index 277a13efe2..1bc94d0d98 100644 --- a/code/modules/mob/living/carbon/lick_wounds.dm +++ b/code/modules/mob/living/carbon/lick_wounds.dm @@ -3,6 +3,11 @@ set category = "Abilities" set desc = "Disinfect and heal small wounds with your saliva." + //CHOMPEdit Start - No longer usable while incapacitated + if(src.incapacitated()) + return + //CHOMPEdit End + if(nutrition < 50) to_chat(src, "You need more energy to produce antiseptic enzymes. Eat something and try again.") return @@ -57,7 +62,7 @@ if(affecting.brute_dam > 20 || affecting.burn_dam > 20) to_chat(src, "The wounds on [M]'s [affecting.name] are too severe to treat with just licking.") return - + else visible_message("\The [src] starts licking the wounds on [M]'s [affecting.name] clean.", \ "You start licking the wounds on [M]'s [affecting.name] clean." ) @@ -73,7 +78,7 @@ if(affecting.is_bandaged() && affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check. to_chat(src, "The wounds on [M]'s [affecting.name] have already been treated.") - return + return else visible_message("\The [src] [pick("slathers \a [W.desc] on [M]'s [affecting.name] with their spit.", diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 94776d570e..a5e5fece26 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -17,6 +17,10 @@ //VOREStation Edit End nest = null + if(isbelly(loc) && tf_mob_holder) + mind?.vore_death = TRUE + tf_mob_holder.mind?.vore_death = TRUE + for(var/datum/soul_link/S as anything in owned_soul_links) S.owner_died(gibbed) for(var/datum/soul_link/S as anything in shared_soul_links) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 1182dcf34b..6356bfb7b3 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -72,6 +72,8 @@ handle_vision() + handle_tf_holder() //VOREStation Addition + /mob/living/proc/handle_breathing() return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index bf23a03e68..e0f7d9a14b 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -32,6 +32,28 @@ nest = null if(buckled) buckled.unbuckle_mob(src, TRUE) + //VOREStation Addition Start + if(tf_mob_holder && tf_mob_holder.loc == src) + tf_mob_holder.ckey = ckey + if(isbelly(loc)) + tf_mob_holder.loc = loc + tf_mob_holder.forceMove(loc) + else + var/turf/get_dat_turf = get_turf(src) + tf_mob_holder.loc = get_dat_turf + tf_mob_holder.forceMove(get_dat_turf) + QDEL_LIST_NULL(tf_mob_holder.vore_organs) + tf_mob_holder.vore_organs = list() + for(var/obj/belly/B as anything in vore_organs) + B.loc = tf_mob_holder + B.forceMove(tf_mob_holder) + B.owner = tf_mob_holder + tf_mob_holder.vore_organs |= B + vore_organs -= B + + if(tf_mob_holder) + tf_mob_holder = null + //VOREStation Addition End qdel(selected_image) QDEL_NULL(vorePanel) //VOREStation Add @@ -39,7 +61,6 @@ temp_language_sources = null //VOREStation Add temp_languages = null //VOREStation Add - if(LAZYLEN(organs)) organs_by_name.Cut() while(organs.len) @@ -179,6 +200,13 @@ if(!isnull(M.incoming_healing_percent)) amount *= M.incoming_healing_percent + //VOREStation Additon Start + if(tf_mob_holder && tf_mob_holder.loc == src) + var/dmgmultiplier = tf_mob_holder.maxHealth / maxHealth + dmgmultiplier *= amount + tf_mob_holder.adjustBruteLoss(dmgmultiplier) + //VOREStation Additon End + bruteloss = min(max(bruteloss + amount, 0),(getMaxHealth()*2)) updatehealth() @@ -252,7 +280,12 @@ for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_healing_percent)) amount *= M.incoming_healing_percent - + //VOREStation Additon Start + if(tf_mob_holder && tf_mob_holder.loc == src) + var/dmgmultiplier = tf_mob_holder.maxHealth / maxHealth + dmgmultiplier *= amount + tf_mob_holder.adjustFireLoss(dmgmultiplier) + //VOREStation Additon End fireloss = min(max(fireloss + amount, 0),(getMaxHealth()*2)) updatehealth() diff --git a/code/modules/mob/living/living_vr.dm b/code/modules/mob/living/living_vr.dm index dc84b64e68..e4b639533c 100644 --- a/code/modules/mob/living/living_vr.dm +++ b/code/modules/mob/living/living_vr.dm @@ -27,10 +27,81 @@ set desc = "Sets OOC notes about yourself or your RP preferences or status." set category = "OOC" - var/new_metadata = sanitize(tgui_input_text(usr, "Enter any information you'd like others to see, such as Roleplay-preferences. This will not be saved permanently, only for this round.", "Game Preference" , html_decode(ooc_notes), , prevent_enter = TRUE), extra = 0) + var/new_metadata = sanitize(tgui_input_text(usr, "Enter any information you'd like others to see, such as Roleplay-preferences. This will not be saved permanently, only for this round.", "Game Preference" , html_decode(ooc_notes), multiline = TRUE, prevent_enter = TRUE), extra = 0) if(new_metadata && CanUseTopic(usr)) ooc_notes = new_metadata to_chat(usr, "OOC notes updated.") log_admin("[key_name(usr)] updated their OOC notes mid-round.") +/mob/living/verb/set_voice_freq() + set name = "Set Voice Frequency" + set desc = "Sets your voice frequency to be higher or lower pitched!" + set category = "OOC" + var/list/preset_voice_freqs = list("high" = MAX_VOICE_FREQ, "middle-high" = 56250, "middle" = 425000, "middle-low"= 28750, "low" = MIN_VOICE_FREQ, "custom" = 1, "random" = 0) + var/choice = tgui_input_list(src, "What would you like to set your voice frequency to?", "Voice Frequency", preset_voice_freqs) + if(!choice) + return + choice = preset_voice_freqs[choice] + if(choice == 0) + voice_freq = choice + return + else if(choice == 1) + choice = tgui_input_number(src, "Choose your character's voice frequency, ranging from [MIN_VOICE_FREQ] to [MAX_VOICE_FREQ]", "Custom Voice Frequency", null, MAX_VOICE_FREQ, MIN_VOICE_FREQ, round_value = TRUE) + else if(choice > MAX_VOICE_FREQ) + choice = MAX_VOICE_FREQ + else if(choice < MIN_VOICE_FREQ) + choice = MIN_VOICE_FREQ + voice_freq = choice +/mob/living/verb/set_voice_type() + set name = "Set Voice Type" + set desc = "Sets your voice style!" + set category = "OOC" + + var/list/possible_voice_types = list( + "beep-boop", + "goon speak 1", + "goon speak 2", + "goon speak 3", + "goon speak 4", + "goon speak blub", + "goon speak bottalk", + "goon speak buwoo", + "goon speak cow", + "goon speak lizard", + "goon speak pug", + "goon speak pugg", + "goon speak roach", + "goon speak skelly") + var/choice = tgui_input_list(usr, "Which set of sounds would you like to use for your character's speech sounds?", "Voice Sounds", possible_voice_types) + if(!choice) + voice_sounds_list = talk_sound + switch(choice) + if("beep-boop") + voice_sounds_list = talk_sound + if("goon speak 1") + voice_sounds_list = goon_speak_one_sound + if("goon speak 2") + voice_sounds_list = goon_speak_two_sound + if("goon speak 3") + voice_sounds_list = goon_speak_three_sound + if("goon speak 4") + voice_sounds_list = goon_speak_four_sound + if("goon speak blub") + voice_sounds_list = goon_speak_blub_sound + if("goon speak bottalk") + voice_sounds_list = goon_speak_bottalk_sound + if("goon speak buwoo") + voice_sounds_list = goon_speak_buwoo_sound + if("goon speak cow") + voice_sounds_list = goon_speak_cow_sound + if("goon speak lizard") + voice_sounds_list = goon_speak_lizard_sound + if("goon speak pug") + voice_sounds_list = goon_speak_pug_sound + if("goon speak pugg") + voice_sounds_list = goon_speak_pugg_sound + if("goon speak roach") + voice_sounds_list = goon_speak_roach_sound + if("goon speak skelly") + voice_sounds_list = goon_speak_skelly_sound diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 18aef57d34..d7abf3bcc1 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -13,13 +13,13 @@ to_chat(src,"Mob AI disabled while you are controlling the mob.") AddComponent(/datum/component/character_setup) - + // Vore stuff verbs |= /mob/living/proc/escapeOOC verbs |= /mob/living/proc/lick verbs |= /mob/living/proc/smell verbs |= /mob/living/proc/switch_scaling - + if(!no_vore) verbs |= /mob/living/proc/vorebelly_printout if(!vorePanel) @@ -29,4 +29,40 @@ verbs += /mob/living/proc/vore_check_reagents //CHOMP If mob doesnt have bellies it cant use this verb for anything verbs += /mob/living/proc/vore_bellyrub //CHOMP If mob doesnt have bellies it probably won't be needing this anyway + //VOREStation Add Start + if(!voice_sounds_list.len || !voice_sounds_list) + if(client.prefs.voice_sound) + var/prefsound = client.prefs.voice_sound + switch(prefsound) + if("beep-boop") + voice_sounds_list = talk_sound + if("goon speak 1") + voice_sounds_list = goon_speak_one_sound + if("goon speak 2") + voice_sounds_list = goon_speak_two_sound + if("goon speak 3") + voice_sounds_list = goon_speak_three_sound + if("goon speak 4") + voice_sounds_list = goon_speak_four_sound + if("goon speak blub") + voice_sounds_list = goon_speak_blub_sound + if("goon speak bottalk") + voice_sounds_list = goon_speak_bottalk_sound + if("goon speak buwoo") + voice_sounds_list = goon_speak_buwoo_sound + if("goon speak cow") + voice_sounds_list = goon_speak_cow_sound + if("goon speak lizard") + voice_sounds_list = goon_speak_lizard_sound + if("goon speak pug") + voice_sounds_list = goon_speak_pug_sound + if("goon speak pugg") + voice_sounds_list = goon_speak_pugg_sound + if("goon speak roach") + voice_sounds_list = goon_speak_roach_sound + if("goon speak skelly") + voice_sounds_list = goon_speak_skelly_sound + else + voice_sounds_list = talk_sound + //VOREStation Add End return . diff --git a/code/modules/mob/living/organs.dm b/code/modules/mob/living/organs.dm index 133961a631..2e03e66fb9 100644 --- a/code/modules/mob/living/organs.dm +++ b/code/modules/mob/living/organs.dm @@ -35,4 +35,10 @@ if(!ispath(E)) E.droplimb(0,DROPLIMB_EDGE,1) + //VOREStation Addition Start + if(tf_mob_holder && tf_mob_holder.loc == src) + tf_mob_holder.revert_mob_tf() + tf_mob_holder.gib() + //VOREStation Addition End + ..() diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 5d56ae108f..9367044c0d 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -18,6 +18,7 @@ var/list/department_radio_keys = list( ":p" = "AI Private", ".p" = "AI Private", ":y" = "Explorer", ".y" = "Explorer", ":a" = "Talon", ".a" = "Talon", //VOREStation Add, + ":g" = "Casino", ".g" = "Casino", ":R" = "right ear", ".R" = "right ear", ":L" = "left ear", ".L" = "left ear", @@ -37,6 +38,7 @@ var/list/department_radio_keys = list( ":P" = "AI Private", ".P" = "AI Private", ":Y" = "Explorer", ".Y" = "Explorer", ":A" = "Talon", ".A" = "Talon", //VOREStation Add, + ":G" = "Casino", ".G" = "Casino", // Cyrillic characters on the same keys on the Russian QWERTY (phonetic) layout ":к" = "right ear", ".к" = "right ear", @@ -57,7 +59,8 @@ var/list/department_radio_keys = list( ":м" = "Service", ".м" = "Service", ":з" = "AI Private", ".з" = "AI Private", ":н" = "Explorer", ".н" = "Explorer", - ":ф" = "Talon", ".ф" = "Talon" //VOREStation Add + ":ф" = "Talon", ".ф" = "Talon", //VOREStation Add + ":п" = "Casino", ".п" = "Casino", ) @@ -259,6 +262,9 @@ var/list/channel_to_radio_key = new //Default range and italics, may be overridden past here var/message_range = world.view var/italics = 0 + var/do_sound = TRUE + if(!voice_sounds_list || !voice_sounds_list.len) + do_sound = FALSE //Speaking into radios if(used_radios.len) @@ -302,6 +308,7 @@ var/list/channel_to_radio_key = new for(var/datum/multilingual_say_piece/S in message_pieces) if((S.speaking.flags & NONVERBAL) || (S.speaking.flags & INAUDIBLE)) custom_emote(1, "[pick(S.speaking.signlang_verb)].") + do_sound = FALSE //These will contain the main receivers of the message var/list/listening = list() @@ -366,18 +373,18 @@ var/list/channel_to_radio_key = new var/runechat_enabled = M.client?.is_preference_enabled(/datum/client_preference/runechat_mob) if(dst <= message_range || (M.stat == DEAD && !forbid_seeing_deadchat)) //Inside normal message range, or dead with ears (handled in the view proc) - if(M.client && !runechat_enabled) - var/image/I1 = listening[M] || speech_bubble - images_to_clients[I1] |= M.client - M << I1 - M.hear_say(message_pieces, verb, italics, src, speech_sound, sound_vol) + if(M.hear_say(message_pieces, verb, italics, src, speech_sound, sound_vol)) + if(M.client && !runechat_enabled) + var/image/I1 = listening[M] || speech_bubble + images_to_clients[I1] |= M.client + M << I1 if(whispering && !isobserver(M)) //Don't even bother with these unless whispering if(dst > message_range && dst <= w_scramble_range) //Inside whisper scramble range - if(M.client && !runechat_enabled) - var/image/I2 = listening[M] || speech_bubble - images_to_clients[I2] |= M.client - M << I2 - M.hear_say(stars_all(message_pieces), verb, italics, src, speech_sound, sound_vol*0.2) + if(M.hear_say(stars_all(message_pieces), verb, italics, src, speech_sound, sound_vol*0.2)) + if(M.client && !runechat_enabled) + var/image/I2 = listening[M] || speech_bubble + images_to_clients[I2] |= M.client + M << I2 if(dst > w_scramble_range && dst <= world.view) //Inside whisper 'visible' range M.show_message("[name] [w_not_heard].", 2) @@ -398,12 +405,22 @@ var/list/channel_to_radio_key = new C.images -= I qdel(I) + /* CHOMPEdit - Not needed if you set your defaults right + var/ourfreq = null + if(voice_freq > 0 ) + ourfreq = voice_freq + */ //Log the message to file if(message_mode) message = "([message_mode == "headset" ? "Common" : capitalize(message_mode)]) [message]" //Adds radio keys used if available if(whispering) + if(do_sound && message) + playsound(T, pick(voice_sounds_list), 25, TRUE, extrarange = -6, falloff = 1 , is_global = TRUE, frequency = voice_freq, ignore_walls = FALSE, preference = /datum/client_preference/say_sounds) //CHOMPEdit - Use say sound prefs + log_whisper(message, src) else + if(do_sound && message) + playsound(T, pick(voice_sounds_list), 75, TRUE, falloff = 1 , is_global = TRUE, frequency = voice_freq, ignore_walls = FALSE, preference = /datum/client_preference/say_sounds) //CHOMPEdit - tiny fix log_say(message, src) return 1 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ea15eaa8c3..a2ce47c2be 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -51,7 +51,7 @@ var/list/ai_verbs_default = list( var/obj/machinery/camera/camera = null var/aiRestorePowerRoutine = 0 var/viewalerts = 0 - var/icon/holo_icon//Default is assigned when AI is created. + var/icon/holo_icon //Default is assigned when AI is created. var/list/connected_robots = list() var/obj/item/device/pda/ai/aiPDA = null var/obj/item/device/communicator/aiCommunicator = null @@ -161,7 +161,6 @@ var/list/ai_verbs_default = list( add_language(LANGUAGE_SIIK, 1) add_language(LANGUAGE_AKHANI, 1) add_language(LANGUAGE_SKRELLIAN, 1) - add_language(LANGUAGE_SKRELLIANFAR, 0) add_language(LANGUAGE_TRADEBAND, 1) add_language(LANGUAGE_GUTTER, 1) add_language(LANGUAGE_EAL, 1) diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm index 4989cecace..6290b72f51 100644 --- a/code/modules/mob/living/silicon/pai/death.dm +++ b/code/modules/mob/living/silicon/pai/death.dm @@ -1,15 +1,16 @@ -/mob/living/silicon/pai/death(gibbed) +//VOREStation Edit - Let's make it so that pAIs don't just always cease to be when they die! It would be cool if we could fix them. +/mob/living/silicon/pai/death(gibbed,deathmessage="fizzles out and clatters to the floor...") +// set_respawn_timer() release_vore_contents() + close_up(TRUE) if(card) - card.removePersonality() - //if(gibbed) //VOREStation Edit Start. This prevents pAIs from joining back into their card after the card's killed - src.loc = get_turf(card) - qdel(card) - /*else - close_up() - qdel(card)*/ //VOREStation Edit End. - if(mind) - qdel(mind) - ..(gibbed) - ghostize() - qdel(src) + card.cut_overlays() + card.setEmotion(16) + card.damage_random_component() + + if(gibbed) + qdel(card) + ..(gibbed) + else + card.add_overlay("pai-dead") + ..(gibbed,deathmessage) diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm index 2871988eee..6e7e8a42a1 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -1,8 +1,5 @@ /mob/living/silicon/pai/Life() - if (src.stat == DEAD) - return - if(src.cable) if(get_dist(src, src.cable) > 1) var/turf/T = get_turf_or_move(src.loc) @@ -13,6 +10,21 @@ qdel(src.cable) src.cable = null + if (src.stat == DEAD) + return + + if(card.cell != PP_FUNCTIONAL|| card.processor != PP_FUNCTIONAL || card.board != PP_FUNCTIONAL || card.capacitor != PP_FUNCTIONAL) + death() + + if(card.projector != PP_FUNCTIONAL && card.emitter != PP_FUNCTIONAL) + if(loc != card) + close_up() + to_chat(src, "ERROR: System malfunction. Service required!") + else if(card.projector != PP_FUNCTIONAL|| card.emitter != PP_FUNCTIONAL) + if(prob(5)) + close_up() + to_chat(src, "ERROR: System malfunction. Service recommended!") + handle_regular_hud_updates() handle_vision() @@ -24,7 +36,8 @@ handle_statuses() if(health <= 0) - death(null,"gives one shrill beep before falling lifeless.") + card.death_damage() + death(null,"fizzles out and clatters to the floor...") else if(health < maxHealth && istype(src.loc , /obj/item/device/paicard)) adjustBruteLoss(-0.5) adjustFireLoss(-0.5) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index ed09bebe0c..c79d777efb 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -52,7 +52,8 @@ "Teppi" = "teppi", "Catslug" = "catslug", "Car" = "car", - "Type One" = "typeone" + "Type One" = "typeone", + "Type Thirteen" = "13" //VOREStation Addition End ) @@ -104,6 +105,8 @@ var/current_pda_messaging = null + var/our_icon_rotation = 0 + /mob/living/silicon/pai/New(var/obj/item/device/paicard) src.loc = paicard card = paicard @@ -120,7 +123,7 @@ add_language(LANGUAGE_GUTTER, 1) add_language(LANGUAGE_EAL, 1) add_language(LANGUAGE_TERMINUS, 1) - add_language(LANGUAGE_SIGN, 0) + add_language(LANGUAGE_SIGN, 1) verbs += /mob/living/silicon/pai/proc/choose_chassis verbs += /mob/living/silicon/pai/proc/choose_verbs @@ -142,6 +145,7 @@ // Vorestation Edit: Meta Info for pAI if (client.prefs) ooc_notes = client.prefs.metadata + src << sound('sound/effects/pai_login.ogg', volume = 75) //VOREStation Add // this function shows the information about being silenced as a pAI in the Status panel /mob/living/silicon/pai/proc/show_silenced() @@ -168,7 +172,8 @@ /mob/living/silicon/pai/emp_act(severity) // Silence for 2 minutes - // 20% chance to kill + // 20% chance to damage critical components + // 50% chance to damage a non critical component // 33% chance to unbind // 33% chance to change prime directive (based on severity) // 33% chance of no additional effect @@ -177,10 +182,12 @@ to_chat(src, "Communication circuit overload. Shutting down and reloading communication circuits - speech and messaging functionality will be unavailable until the reboot is complete.") if(prob(20)) var/turf/T = get_turf_or_move(src.loc) + card.death_damage() for (var/mob/M in viewers(T)) M.show_message("A shower of sparks spray from [src]'s inner workings.", 3, "You hear and smell the ozone hiss of electrical sparks being expelled violently.", 2) - return src.death(0) - + return + if(prob(50)) + card.damage_random_component(TRUE) switch(pick(1,2,3)) if(1) src.master = null @@ -245,7 +252,11 @@ if(src.loc != card) return + if(card.projector != PP_FUNCTIONAL && card.emitter != PP_FUNCTIONAL) + to_chat(src, "ERROR: System malfunction. Service required!") + if(world.time <= last_special) + to_chat(src, "You can't unfold yet.") return last_special = world.time + 100 @@ -281,6 +292,7 @@ card.forceMove(src) card.screen_loc = null + canmove = TRUE var/turf/T = get_turf(src) if(istype(T)) T.visible_message("[src] folds outwards, expanding into a mobile form.") @@ -299,6 +311,7 @@ return if(world.time <= last_special) + to_chat(src, "You can't fold up yet.") return close_up() @@ -307,17 +320,13 @@ /mob/living/silicon/pai/proc/choose_chassis() set category = "pAI Commands" set name = "Choose Chassis" - var/choice var/finalized = "No" while(finalized == "No" && src.client) - choice = tgui_input_list(usr,"What would you like to use for your mobile chassis icon?","Chassis Choice", possible_chassis) if(!choice) return - icon_state = possible_chassis[choice] finalized = tgui_alert(usr, "Look at your sprite. Is this what you wish to use?","Choose Chassis",list("No","Yes")) - chassis = possible_chassis[choice] verbs |= /mob/living/proc/hide //VOREStation Removal End @@ -345,14 +354,49 @@ var/obj/item/weapon/rig/rig = src.get_rig() if(istype(rig)) rig.force_rest(src) + return + else if(chassis == "13") + resting = !resting + //update_transform() I want this to make you ROTATE like normal HUMANS do! But! There's lots of problems and I don't know how to fix them! else resting = !resting icon_state = resting ? "[chassis]_rest" : "[chassis]" update_icon() //VOREStation edit - to_chat(src, "You are now [resting ? "resting" : "getting up"]") + to_chat(src, "You are now [resting ? "resting" : "getting up"]") canmove = !resting +/* +/mob/living/silicon/pai/update_transform() + var/desired_scale_x = size_multiplier * icon_scale_x + var/desired_scale_y = size_multiplier * icon_scale_y + // Now for the regular stuff. + var/matrix/M = matrix() + M.Scale(desired_scale_x, desired_scale_y) + M.Translate(0, (vis_height/2)*(desired_scale_y-1)) + if(chassis != "13") + appearance_flags |= PIXEL_SCALE + var/anim_time = 3 + if(resting) + M.Turn(90) + M.Scale(desired_scale_y, desired_scale_x) + if(holo_icon_dimension_X == 64 && holo_icon_dimension_Y == 64) + M.Translate(13,-22) + else if(holo_icon_dimension_X == 32 && holo_icon_dimension_Y == 64) + M.Translate(1,-22) + else if(holo_icon_dimension_X == 64 && holo_icon_dimension_Y == 32) + M.Translate(13,-6) + else + M.Translate(1,-6) + layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters + else + M.Scale(desired_scale_x, desired_scale_y) + M.Translate(0, (vis_height/2)*(desired_scale_y-1)) + layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters + animate(src, transform = M, time = anim_time) + src.transform = M + handle_status_indicators() +*/ //Overriding this will stop a number of headaches down the track. /mob/living/silicon/pai/attackby(obj/item/weapon/W as obj, mob/user as mob) if(W.force) @@ -373,7 +417,7 @@ close_up() //I'm not sure how much of this is necessary, but I would rather avoid issues. -/mob/living/silicon/pai/proc/close_up() +/mob/living/silicon/pai/proc/close_up(silent= FALSE) last_special = world.time + 100 @@ -383,7 +427,7 @@ release_vore_contents(FALSE) //VOREStation Add var/turf/T = get_turf(src) - if(istype(T)) T.visible_message("[src] neatly folds inwards, compacting down to a rectangular card.") + if(istype(T) && !silent) T.visible_message("[src] neatly folds inwards, compacting down to a rectangular card.") if(client) src.stop_pulling() @@ -401,7 +445,7 @@ M.drop_from_inventory(H) H.loc = get_turf(src) src.loc = get_turf(H) - + if(isbelly(loc)) //If in tumby, when fold up, card go into tumby var/obj/belly/B = loc src.forceMove(card) diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index 0a2f421d07..86ef6cca5a 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -6,6 +6,10 @@ var/hide_glow = FALSE var/image/eye_layer = null // Holds the eye overlay. var/eye_color = "#00ff0d" + var/icon/holo_icon + var/icon/holo_icon_north + var/holo_icon_dimension_X = 32 + var/holo_icon_dimension_Y = 32 var/global/list/wide_chassis = list( "rat", "panther", @@ -41,7 +45,8 @@ "teppi", "catslug", "car", - "typeone" + "typeone", + "13" ) //These vars keep track of whether you have the related software, used for easily updating the UI var/soft_ut = FALSE //universal translator @@ -54,12 +59,35 @@ /mob/living/silicon/pai/Initialize() . = ..() - + verbs |= /mob/proc/dominate_predator verbs |= /mob/living/proc/dominate_prey verbs |= /mob/living/proc/set_size verbs |= /mob/living/proc/shred_limb +/mob/living/silicon/pai/Login() + . = ..() + if(!holo_icon) + last_special = world.time + 100 //Let's give get_character_icon time to work + get_character_icon() + if(stat == DEAD) + healths.icon_state = "health7" + +/mob/living/silicon/pai/proc/full_restore() + adjustBruteLoss(- bruteloss) + adjustFireLoss(- fireloss) + do_after(src, 1 SECONDS) + card.setEmotion(16) + stat = CONSCIOUS + do_after(src, 5 SECONDS) + var/mob/observer/dead/ghost = src.get_ghost() + if(ghost) + ghost.notify_revive("Someone is trying to revive you. Re-enter your body if you want to be revived!", 'sound/effects/pai-restore.ogg', source = card) + canmove = TRUE + card.setEmotion(15) + playsound(card, 'sound/effects/pai-restore.ogg', 50, FALSE) + card.visible_message("\The [card] chimes.", runemessage = "chime") + /mob/living/silicon/pai/proc/pai_nom(var/mob/living/T in oview(1)) set name = "pAI Nom" set category = "pAI Commands" @@ -78,6 +106,11 @@ /mob/living/silicon/pai/update_icon() //Some functions cause this to occur, such as resting ..() + if(chassis == "13") + icon = holo_icon + add_eyes() + return + update_fullness_pai() if(!people_eaten && !resting) @@ -106,6 +139,10 @@ /mob/living/silicon/pai/update_icons() //And other functions cause this to occur, such as digesting someone. ..() + if(chassis == "13") + icon = holo_icon + add_eyes() + return update_fullness_pai() if(!people_eaten && !resting) icon_state = "[chassis]" @@ -132,9 +169,15 @@ choice = tgui_input_list(usr, "What would you like to use for your mobile chassis icon?", "Chassis Choice", possible_chassis) if(!choice) return var/oursize = size_multiplier - resize(1, FALSE, TRUE, TRUE, FALSE) //We resize ourselves to normal here for a moment to let the vis_height get reset + resize(1, FALSE, TRUE, TRUE, FALSE) //We resize ourselves to normal here for a moment to let the vis_height get reset chassis = possible_chassis[choice] - if(chassis in wide_chassis) + if(chassis == "13") + if(!holo_icon) + if(!get_character_icon()) + return + icon_state = null + icon = holo_icon + else if(chassis in wide_chassis) icon = 'icons/mob/pai_vr64x64.dmi' vis_height = 64 else @@ -154,6 +197,7 @@ /mob/living/silicon/pai/verb/toggle_eyeglow() set category = "pAI Commands" set name = "Toggle Eye Glow" + if(chassis in allows_eye_color) if(eye_glow && !hide_glow) eye_glow = FALSE @@ -182,18 +226,41 @@ // Release belly contents before being gc'd! /mob/living/silicon/pai/Destroy() release_vore_contents() + if(ckey) + paikeys -= ckey + return ..() + +/mob/living/silicon/pai/clear_client() + if(ckey) + paikeys -= ckey return ..() /mob/living/silicon/pai/proc/add_eyes() remove_eyes() - if(chassis in allows_eye_color) - if(!eye_layer) - eye_layer = image(icon, "[icon_state]-eyes") - eye_layer.appearance_flags = appearance_flags - eye_layer.color = eye_color - if(eye_glow && !hide_glow) - eye_layer.plane = PLANE_LIGHTING_ABOVE - add_overlay(eye_layer) + if(chassis == "13") + if(holo_icon.Width() > 32) + holo_icon_dimension_X = 64 + pixel_x = -16 + default_pixel_x = -16 + if(holo_icon.Height() > 32) + holo_icon_dimension_Y = 64 + if(holo_icon_dimension_X == 32 && holo_icon_dimension_Y == 32) + eye_layer = image('icons/mob/pai_vr.dmi', "type13-eyes") + else if(holo_icon_dimension_X == 32 && holo_icon_dimension_Y == 64) + eye_layer = image('icons/mob/pai_vr32x64.dmi', "type13-eyes") + else if(holo_icon_dimension_X == 64 && holo_icon_dimension_Y == 32) + eye_layer = image('icons/mob/pai_vr64x32.dmi', "type13-eyes") + else if(holo_icon_dimension_X == 64 && holo_icon_dimension_Y == 64) + eye_layer = image('icons/mob/pai_vr64x64.dmi', "type13-eyes") + else + else if(chassis in allows_eye_color) + eye_layer = image(icon, "[icon_state]-eyes") + else return + eye_layer.appearance_flags = appearance_flags + eye_layer.color = eye_color + if(eye_glow && !hide_glow) + eye_layer.plane = PLANE_LIGHTING_ABOVE + add_overlay(eye_layer) /mob/living/silicon/pai/proc/remove_eyes() cut_overlay(eye_layer) @@ -229,7 +296,7 @@ t_him = "hir" else t_him = "them" - else + else switch(target.gender) if(MALE) t_him = "him" @@ -325,7 +392,7 @@ eye_color = oureyes if(ouremotion) card.setEmotion(ouremotion) - + update_icon() return 1 @@ -337,7 +404,7 @@ /mob/living/silicon/pai/a_intent_change(input as text) . = ..() - + switch(a_intent) if(I_HELP) hud_used.help_intent.icon_state = "intent_help-s" @@ -377,7 +444,7 @@ set name = "Hide" set desc = "Allows to hide beneath tables or certain items. Toggled on or off." set category = "Abilities" - + hide() if(status_flags & HIDING) hide_glow = TRUE @@ -441,7 +508,10 @@ to_chat(G, "[src.name]'s screen prints, \"[message]\"") /mob/living/silicon/pai/proc/touch_window(soft_name) //This lets us touch TGUI procs and windows that may be nested behind other TGUI procs and windows - for(var/thing in software) //so we can access our software without having to open up the software interface TGUI window + if(stat != CONSCIOUS) //so we can access our software without having to open up the software interface TGUI window + to_chat(src, "You can't do that right now.") + return + for(var/thing in software) var/datum/pai_software/S = software[thing] if(istype(S, /datum/pai_software) && S.name == soft_name) if(S.toggle) @@ -466,7 +536,7 @@ /mob/living/silicon/pai/proc/refresh_software_status() //This manages the pAI software status buttons icon states based on if you have them and if they are enabled for(var/thing in software) //this only gets called when you click one of the relevent buttons, rather than all the time! - var/datum/pai_software/soft = software[thing] + var/datum/pai_software/soft = software[thing] if(istype(soft,/datum/pai_software/med_records)) soft_mr = TRUE if(istype(soft,/datum/pai_software/sec_records)) @@ -544,4 +614,46 @@ touch_window("Door Jack") /mob/living/silicon/pai/proc/ar_hud() - touch_window("AR HUD") \ No newline at end of file + touch_window("AR HUD") + +/mob/living/silicon/pai/proc/get_character_icon() + if(!client || !client.prefs) return FALSE + var/mob/living/carbon/human/dummy/dummy = new () + //This doesn't include custom_items because that's ... hard. + client.prefs.dress_preview_mob(dummy) + sleep(1 SECOND) //Strange bug in preview code? Without this, certain things won't show up. Yay race conditions? + dummy.regenerate_icons() + + var/icon/new_holo = getCompoundIcon(dummy) + + dummy.tail_alt = TRUE + dummy.set_dir(NORTH) + var/icon/new_holo_north = getCompoundIcon(dummy) + + qdel(holo_icon) + qdel(holo_icon_north) + qdel(dummy) + holo_icon = new_holo + holo_icon_north = new_holo_north + return TRUE + +/mob/living/silicon/pai/set_dir(var/new_dir) + . = ..() + if(. && (chassis == "13")) + switch(dir) + if(SOUTH) + icon = holo_icon + else + icon = holo_icon_north + +/mob/living/silicon/pai/adjustBruteLoss(amount, include_robo) + . = ..() + if(amount > 0 && health <= 90) //Something's probably attacking us! + if(prob(amount)) //The more damage it is doing, the more likely it is to damage something important! + card.damage_random_component() + +/mob/living/silicon/pai/adjustFireLoss(amount, include_robo) + . = ..() + if(amount > 0 && health <= 90) + if(prob(amount)) + card.damage_random_component() diff --git a/code/modules/mob/living/silicon/pai/personality.dm b/code/modules/mob/living/silicon/pai/personality.dm index de2b8fa202..96f9f5ab46 100644 --- a/code/modules/mob/living/silicon/pai/personality.dm +++ b/code/modules/mob/living/silicon/pai/personality.dm @@ -60,5 +60,6 @@ F["eyecolor"] >> src.eye_color F["chassis"] >> src.chassis F["emotion"] >> src.ouremotion + F["gender"] >> src.gender return 1 diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index d2038698e8..e791f20979 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -37,6 +37,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates if(istype(card,/obj/item/device/paicard) && istype(candidate,/datum/paiCandidate)) var/mob/living/silicon/pai/pai = new(card) pai.key = candidate.key + paikeys |= pai.ckey card.setPersonality(pai) if(!candidate.name) pai.SetName(pick(ninja_names)) @@ -378,6 +379,16 @@ var/datum/paiController/paiController // Global handler for pAI candidates if(!C) return asked.Add(C.key) asked[C.key] = world.time + + var/mob/ourmob = C.mob + if(ourmob) + var/time_till_respawn = ourmob.time_till_respawn() + if(time_till_respawn == -1 || time_till_respawn) + return + for(var/ourkey in paikeys) + if(ourkey == ourmob.ckey) + return + var/response = tgui_alert(C, "[inquirer] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", list("Yes", "No", "Never for this round")) if(!C) return //handle logouts that happen whilst the alert is waiting for a response. if(response == "Yes") diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm index 4b18c42beb..ed38dfc9c8 100644 --- a/code/modules/mob/living/silicon/pai/say.dm +++ b/code/modules/mob/living/silicon/pai/say.dm @@ -1,5 +1,7 @@ /mob/living/silicon/pai/say(var/message, var/datum/language/speaking = null, var/whispering = 0) if(silence_time) to_chat(src, "Communication circuits remain uninitialized.") + else if(card.speech_synthesizer != PP_FUNCTIONAL) + to_chat(src, "Communication circuits damaged. Service required.") else - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index d8594fd5fc..9cc6d885d3 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -140,7 +140,7 @@ /datum/pai_software/med_records/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + var/list/records = list() for(var/datum/data/record/general in sortRecord(data_core.general)) var/list/record = list() @@ -196,7 +196,7 @@ /datum/pai_software/sec_records/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + var/list/records = list() for(var/datum/data/record/general in sortRecord(data_core.general)) var/list/record = list() @@ -404,7 +404,7 @@ user.add_language(LANGUAGE_ZADDAT) user.add_language(LANGUAGE_SCHECHI) user.add_language(LANGUAGE_DRUDAKAR) - user.add_language(LANGUAGE_SLAVIC) + user.add_language(LANGUAGE_SLAVIC) //CHOMP reAdd user.add_language(LANGUAGE_BIRDSONG) user.add_language(LANGUAGE_SAGARU) user.add_language(LANGUAGE_CANILUNZT) @@ -413,24 +413,15 @@ user.add_language(LANGUAGE_ENOCHIAN) user.add_language(LANGUAGE_VESPINAE) user.add_language(LANGUAGE_SPACER) - user.add_language(LANGUAGE_CLOWNISH) user.add_language(LANGUAGE_TAVAN) user.add_language(LANGUAGE_ECHOSONG) - user.add_language(LANGUAGE_CHIMPANZEE) - user.add_language(LANGUAGE_NEAERA) - user.add_language(LANGUAGE_STOK) - user.add_language(LANGUAGE_FARWA) user.add_language(LANGUAGE_ROOTLOCAL) user.add_language(LANGUAGE_VOX) - user.add_language(LANGUAGE_SKRELLIANFAR) user.add_language(LANGUAGE_MINBUS) user.add_language(LANGUAGE_ALAI) user.add_language(LANGUAGE_PROMETHEAN) user.add_language(LANGUAGE_GIBBERISH) - user.add_language("Mouse") - user.add_language("Cat") - user.add_language("Bird") - user.add_language("Dog") + user.add_language("Animal") user.add_language("Teppi") else user.remove_language(LANGUAGE_UNATHI) @@ -440,7 +431,7 @@ user.remove_language(LANGUAGE_ZADDAT) user.remove_language(LANGUAGE_SCHECHI) user.remove_language(LANGUAGE_DRUDAKAR) - user.remove_language(LANGUAGE_SLAVIC) + user.remove_language(LANGUAGE_SLAVIC) //CHOMP reAdd user.remove_language(LANGUAGE_BIRDSONG) user.remove_language(LANGUAGE_SAGARU) user.remove_language(LANGUAGE_CANILUNZT) @@ -449,24 +440,15 @@ user.remove_language(LANGUAGE_ENOCHIAN) user.remove_language(LANGUAGE_VESPINAE) user.remove_language(LANGUAGE_SPACER) - user.remove_language(LANGUAGE_CLOWNISH) user.remove_language(LANGUAGE_TAVAN) user.remove_language(LANGUAGE_ECHOSONG) - user.remove_language(LANGUAGE_CHIMPANZEE) - user.remove_language(LANGUAGE_NEAERA) - user.remove_language(LANGUAGE_STOK) - user.remove_language(LANGUAGE_FARWA) user.remove_language(LANGUAGE_ROOTLOCAL) user.remove_language(LANGUAGE_VOX) - user.remove_language(LANGUAGE_SKRELLIANFAR) user.remove_language(LANGUAGE_MINBUS) user.remove_language(LANGUAGE_ALAI) user.remove_language(LANGUAGE_PROMETHEAN) user.remove_language(LANGUAGE_GIBBERISH) - user.remove_language("Mouse") - user.remove_language("Cat") - user.remove_language("Bird") - user.remove_language("Dog") + user.remove_language("Animal") user.remove_language("Teppi") /datum/pai_software/translator/is_active(mob/living/silicon/pai/user) @@ -486,7 +468,7 @@ /datum/pai_software/signaller/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + var/obj/item/radio/integrated/signal/R = user.sradio data["frequency"] = R.frequency @@ -509,7 +491,7 @@ spawn(0) R.send_signal("ACTIVATE") for(var/mob/O in hearers(1, R.loc)) - O.show_message("[bicon(R)] *beep* *beep*", 3, "*beep* *beep*", 2) + O.show_message("\icon[R][bicon(R)] *beep* *beep*", 3, "*beep* *beep*", 2) if("freq") var/frequency = unformat_frequency(params["freq"]) frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index e6315d944f..88afeae452 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -66,12 +66,12 @@ var/agony = 60 // Copied from stun batons var/stun = 0 // ... same - + var/obj/item/organ/external/affecting = null if(ishuman(target)) var/mob/living/carbon/human/H = target affecting = H.get_organ(hit_zone) - + if(user.a_intent == I_HURT) // Parent handles messages . = ..() @@ -91,7 +91,7 @@ var/mob/living/silicon/robot/R = loc if(R.cell?.use(charge_cost) == charge_cost) stunning = TRUE - + if(stunning) target.stun_effect_act(stun, agony, hit_zone, src) msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].") @@ -216,6 +216,11 @@ desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves." reagent_ids = list("tricordrazine", "inaprovaline", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin") +/obj/item/weapon/reagent_containers/borghypo/hound/trauma + name = "Hound hypospray" + desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves." + reagent_ids = list("inaprovaline", "dexalin", "bicaridine", "anti_toxin", "spaceacillin", "paracetamol") + //Tongue stuff /obj/item/device/dogborg/tongue diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 54fca8d569..2678af4853 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -42,11 +42,13 @@ var/digest_multiplier = 1 var/recycles = FALSE var/medsensor = TRUE //Does belly sprite come with patient ok/dead light? + var/obj/item/device/healthanalyzer/med_analyzer = null /obj/item/device/dogborg/sleeper/New() ..() flags |= NOBLUDGEON //No more attack messages files = new /datum/research/techonly(src) + med_analyzer = new /obj/item/device/healthanalyzer /obj/item/device/dogborg/sleeper/Destroy() go_out() @@ -128,7 +130,7 @@ trashman.reset_view(src) START_PROCESSING(SSobj, src) user.visible_message("[hound.name]'s [src.name] groans lightly as [trashman] slips inside.", "Your [src.name] groans lightly as [trashman] slips inside.") - message_admins("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])") + log_attack("[key_name(hound)] has eaten [key_name(patient)] as a dogborg. ([hound ? "JMP" : "null"])")//CHOMPEdit from message_admins playsound(src, gulpsound, vol = 100, vary = 1, falloff = 0.1, preference = /datum/client_preference/eating_noises) if(delivery) if(islist(deliverylists[delivery_tag])) @@ -216,6 +218,8 @@ dat += "Eject port: [eject_port]" if(!cleaning) dat += "Self-Clean" + if(medsensor) + dat += "Analyze Patient" else dat += "Self-Clean" if(delivery) @@ -336,6 +340,8 @@ if(cleaning) sleeperUI(usr) return + if(href_list["analyze"]) //DO HEALTH ANALYZER STUFF HERE. + med_analyzer.scan_mob(patient,hound) if(href_list["port"]) switch(eject_port) if("ingestion") @@ -548,7 +554,8 @@ var/actual_burn = T.getFireLoss() - old_burn var/damage_gain = actual_brute + actual_burn drain(-25 * damage_gain) //25*total loss as with voreorgan stats. - water.add_charge(damage_gain) + if(water) + water.add_charge(damage_gain) if(T.stat == DEAD) if(ishuman(T)) message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "JMP" : "null"])") @@ -585,10 +592,12 @@ if(ishuman(T)) var/mob/living/carbon/human/Prey = T volume = (Prey.bloodstr.total_volume + Prey.ingested.total_volume + Prey.touching.total_volume + Prey.weight) * Prey.size_multiplier - water.add_charge(volume) + if(water) + water.add_charge(volume) if(T.reagents) volume = T.reagents.total_volume - water.add_charge(volume) + if(water) + water.add_charge(volume) if(patient == T) patient_laststat = null patient = null @@ -612,7 +621,7 @@ for(var/tech in tech_item.origin_tech) files.UpdateTech(tech, tech_item.origin_tech[tech]) synced = FALSE - if(volume) + if(volume && water) water.add_charge(volume) if(recycles && T.matter) for(var/material in T.matter) @@ -620,14 +629,14 @@ if(istype(T,/obj/item/stack)) var/obj/item/stack/stack = T total_material *= stack.get_amount() - if(material == MAT_STEEL) + if(material == MAT_STEEL && metal) metal.add_charge(total_material) - if(material == "glass") + if(material == "glass" && glass) glass.add_charge(total_material) if(decompiler) - if(material == "plastic") + if(material == "plastic" && plastic) plastic.add_charge(total_material) - if(material == "wood") + if(material == "wood" && wood) wood.add_charge(total_material) drain(-50 * digested) else if(istype(target,/obj/effect/decal/remains)) @@ -757,4 +766,11 @@ icon_state = "sleeperert" injection_chems = list("inaprovaline", "paracetamol") // short list +/obj/item/device/dogborg/sleeper/compactor/trauma //Trauma borg belly + name = "Recovery Belly" + desc = "A downgraded model of the medihound sleeper." + icon_state = "sleeper" + injection_chems = list("inaprovaline", "dexalin", "bicaridine", "anti_toxin", "spaceacillin", "paracetamol") + max_item_count = 1 + #undef SLEEPER_INJECT_COST diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 71b84648d5..f36e2067ee 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -180,7 +180,8 @@ desc = "A specialized grasping tool used to preserve and manipulate organic material." can_hold = list( - /obj/item/organ + /obj/item/organ, + /obj/item/device/nif //NIFs can be slapped in during surgery ) /obj/item/weapon/gripper/no_use/organ/Entered(var/atom/movable/AM) @@ -208,7 +209,8 @@ /obj/item/organ/external, /obj/item/organ/internal/brain, //to insert into MMIs, /obj/item/organ/internal/cell, - /obj/item/organ/internal/eyes/robot + /obj/item/organ/internal/eyes/robot, + /obj/item/device/nif //NIFs can be slapped in during surgery ) /obj/item/weapon/gripper/no_use/mech diff --git a/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm index a61c1847b4..eb553ec3a3 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/event_vr.dm @@ -53,7 +53,11 @@ R.pixel_x = -16 R.old_x = -16 R.default_pixel_x = -16 - R.dogborg = TRUE + R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index e676c871c4..fc80a0b0c3 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -262,6 +262,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src) src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bioregen/cyborg(src) //VoreStation Edit: LET ME SUCC src.modules += new /obj/item/weapon/gripper/no_use/organ(src) src.modules += new /obj/item/weapon/gripper/medical(src) src.modules += new /obj/item/weapon/shockpaddles/robot(src) @@ -607,7 +608,6 @@ var/global/list/robot_modules = list( LANGUAGE_SIIK = 1, LANGUAGE_AKHANI = 1, LANGUAGE_SKRELLIAN = 1, - LANGUAGE_SKRELLIANFAR = 0, LANGUAGE_ROOTLOCAL = 0, LANGUAGE_TRADEBAND = 1, LANGUAGE_GUTTER = 1, diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_ch.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_ch.dm index 36cbca3565..e90b557d20 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_ch.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_ch.dm @@ -85,6 +85,8 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 50d907c913..6acc64835c 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -75,6 +75,7 @@ robot_modules["UnityHound"] = /obj/item/weapon/robot_module/robot/chound //CHOMP Addition Unity robot_modules["Honk-Hound"] = /obj/item/weapon/robot_module/robot/clerical/honkborg //CHOMP Addition Honk robot_modules["Stray"] = /obj/item/weapon/robot_module/robot/stray + robot_modules["TraumaHound"] = /obj/item/weapon/robot_module/robot/medical/trauma return 1 //Just add a new proc with the robot_module type if you wish to run some other vore code @@ -208,6 +209,7 @@ "Borgi" = "borgi-sec", "Otieborg" = "oties", "Secborg model V-3" = "SecVale", //CHOMPEdit + "Cat" = "vixsec", //CHOMPEdit "Drake" = "drakesec" ) channels = list("Security" = 1) @@ -248,6 +250,10 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount @@ -288,6 +294,7 @@ "Mediborg model V-2" = "vale", "Borgi" = "borgi-medi", "Mediborg model V-3" = "vale2", //CHOMPEdit + "Cat" = "vixmed", //CHOMPEdit "Drake" = "drakemed" ) @@ -352,7 +359,7 @@ R.icon = 'icons/mob/widerobot_vr.dmi' - src.modules += new /obj/item/device/dogborg/pounce_module(src) //Pounce shit test + src.modules += new /obj/item/weapon/dogborg/pounce(src) //CHOMPEdit - Switch to the more balanced pounce module R.icon = 'icons/mob/widerobot_med_vr.dmi' R.wideborg_dept = 'icons/mob/widerobot_med_vr.dmi' R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' @@ -361,6 +368,76 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End + R.wideborg = TRUE + R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill + R.verbs |= /mob/living/silicon/robot/proc/robot_mount + R.verbs |= /mob/living/proc/toggle_rider_reins + R.verbs |= /mob/living/proc/shred_limb + R.verbs |= /mob/living/silicon/robot/proc/rest_style + ..() + +/obj/item/weapon/robot_module/robot/medical/trauma + name = "traumahound robot module" + channels = list("Medical" = 1) + networks = list(NETWORK_MEDICAL) + subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) + pto_type = PTO_MEDICAL + can_be_pushed = 0 + sprites = list( + "Traumahound" = "traumavale", + ) + +/obj/item/weapon/robot_module/robot/medical/trauma/New(var/mob/living/silicon/robot/R) + src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/weapon/dogborg/jaws/small(src) + src.modules += new /obj/item/device/dogborg/boop_module(src) + src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src) + src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src) + src.modules += new /obj/item/weapon/surgical/cautery/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bonegel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src) + src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) + src.modules += new /obj/item/weapon/gripper/no_use/organ(src) + src.modules += new /obj/item/weapon/gripper/medical(src) + src.modules += new /obj/item/weapon/shockpaddles/robot(src) + src.modules += new /obj/item/weapon/reagent_containers/dropper(src) // Allows surgeon borg to fix necrosis + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) + src.emag = new /obj/item/weapon/reagent_containers/spray(src) + src.emag.reagents.add_reagent("pacid", 250) + src.emag.name = "Polyacid spray" + + var/datum/matter_synth/water = new /datum/matter_synth(500) + water.name = "Water reserves" + water.recharge_rate = 0 + R.water_res = water + synths += water + + var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) + T.water = water + src.modules += T + + var/obj/item/weapon/reagent_containers/borghypo/hound/H = new /obj/item/weapon/reagent_containers/borghypo/hound/trauma(src) + H.water = water + src.modules += H + + var/obj/item/device/dogborg/sleeper/compactor/trauma/B = new /obj/item/device/dogborg/sleeper/compactor/trauma(src) //So they can nom people and heal them + B.water = water + src.modules += B + + R.icon = 'icons/mob/widerobot_trauma_vr.dmi' + R.wideborg_dept = 'icons/mob/widerobot_trauma_vr.dmi' + R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + R.ui_style_vr = TRUE + R.pixel_x = -16 + R.old_x = -16 + R.default_pixel_x = -16 + R.dogborg = TRUE R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount @@ -388,7 +465,7 @@ src.modules += new /obj/item/weapon/gun/energy/taser/mounted/cyborg/ertgun(src) src.modules += new /obj/item/weapon/dogborg/swordtail(src) src.modules += new /obj/item/weapon/tool/crowbar(src) - src.modules += new /obj/item/device/dogborg/pounce_module(src) //Pounce shit test + src.modules += new /obj/item/weapon/dogborg/pounce(src) //CHOMPEdit - Switch to the more balanced pounce module src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src) var/datum/matter_synth/water = new /datum/matter_synth(500) @@ -413,6 +490,10 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount @@ -428,6 +509,7 @@ "Janihound model V-2" = "J9", "Borgi" = "borgi-jani", "Otieborg" = "otiej", + "Cat" = "vixjani", //CHOMPEdit "Drake" = "drakejanit" ) channels = list("Service" = 1) @@ -500,6 +582,10 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount @@ -515,6 +601,7 @@ "Borgi" = "borgi-sci", "SciHound" = "scihound", "SciHoundDark" = "scihounddark", + "Cat" = "vixsci", //CHOMPEdit "Drake" = "drakesci" ) channels = list("Science" = 1) @@ -581,6 +668,10 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount @@ -597,6 +688,7 @@ "V2 Engidog" = "thottbot", "EngiHound" = "engihound", "EngiHoundDark" = "engihounddark", + "Cat" = "vixengi", //CHOMPEdit "Drake" = "drakeeng" ) channels = list("Engineering" = 1) @@ -738,6 +830,10 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount @@ -754,6 +850,7 @@ "Pinkhound" = "k69", "ServicehoundV2" = "serve2", "ServicehoundV2 Darkmode" = "servedark", + "Cat" = "vixserv", //CHOMPEdit "Drake" = "drakemine" ) channels = list("Service" = 1) @@ -816,6 +913,10 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount @@ -830,6 +931,8 @@ "KMine" = "kmine", "CargoHound" = "cargohound", "CargoHoundDark" = "cargohounddark", + "Cat Mining" = "vixmine", //CHOMPEdit + "Cat Cargo" = "vixcargo", //CHOMPEdit "Drake" = "drakemine" ) channels = list("Supply" = 1) @@ -877,6 +980,10 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount @@ -963,6 +1070,10 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill ..() @@ -1038,6 +1149,10 @@ R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + //CHOMPEdit - Add vore capacity + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) + //CHOMPEdit End R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill R.verbs |= /mob/living/silicon/robot/proc/robot_mount diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm index d8f7aa8a3a..324e4afabc 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm @@ -10,7 +10,6 @@ LANGUAGE_SIIK = 0, LANGUAGE_AKHANI = 0, LANGUAGE_SKRELLIAN = 0, - LANGUAGE_SKRELLIANFAR = 0, LANGUAGE_ROOTLOCAL = 0, LANGUAGE_GUTTER = 1, LANGUAGE_SCHECHI = 0, diff --git a/code/modules/mob/living/silicon/robot/robot_modules_yw.dm b/code/modules/mob/living/silicon/robot/robot_modules_yw.dm index 72c683850a..1f900c240a 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules_yw.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules_yw.dm @@ -41,7 +41,7 @@ src.modules += new /obj/item/device/dogborg/boop_module(src) //Boop people on the nose. src.modules += new /obj/item/device/dogborg/tongue(src) //This is so they can clean up bloody evidence after it's examined, and so they can lick crew. src.modules += new /obj/item/device/dogborg/sleeper/K9(src) //Eat criminals. Bring them to the brig. - src.modules += new /obj/item/device/dogborg/pounce_module(src) //Pounce shit test + src.modules += new /obj/item/weapon/dogborg/pounce(src) //CHOMPEdit - Switch to the more balanced pounce module src.modules += new /obj/item/borg/sight/material(src) src.modules += new /obj/item/weapon/tool/wrench(src) src.modules += new /obj/item/weapon/tool/screwdriver(src) @@ -98,7 +98,7 @@ src.emag.reagents.add_reagent("pacid", 250) src.emag.name = "Polyacid spray" - src.modules += new /obj/item/device/dogborg/pounce_module(src) //Pounce shit test + src.modules += new /obj/item/weapon/dogborg/pounce(src) //CHOMPEdit - Switch to the more balanced pounce module. //R.icon_state = "medihound" R.pixel_x = -16 R.old_x = -16 diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index 4419da3936..a321313c71 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -1,6 +1,7 @@ /mob/living/silicon/robot var/sleeper_g var/sleeper_r + var/sleeper_resting = FALSE //CHOMPEdit - Enable resting belly sprites for dogborgs that have the sprites var/leaping = 0 var/pounce_cooldown = 0 var/pounce_cooldown_time = 40 @@ -97,9 +98,10 @@ vr_sprite_check() ..() if(dogborg == TRUE && stat == CONSCIOUS) + //update_fullness() // CHOMPEdit - Needed so that we can have the vore sprites when only using vore bellies if(sleeper_g == TRUE) add_overlay("[module_sprites[icontype]]-sleeper_g") - if(sleeper_r == TRUE) + if(sleeper_r == TRUE || (!sleeper_g && vore_fullness_ex["stomach"])) //CHOMPEdit - Also allow normal vore bellies to affect this sprite add_overlay("[module_sprites[icontype]]-sleeper_r") if(istype(module_active,/obj/item/weapon/gun/energy/laser/mounted)) add_overlay("laser") @@ -111,10 +113,28 @@ cut_overlays() // Hide that gut for it has no ground sprite yo. if(sitting) icon_state = "[module_sprites[icontype]]-sit" + //CHOMPEdit Begin - Add ability to have sleeper belly sprites if available + if(sleeper_resting && sleeper_g == TRUE) + add_overlay("[module_sprites[icontype]]-sleeper_g-sit") + if(sleeper_resting && sleeper_r == TRUE) + add_overlay("[module_sprites[icontype]]-sleeper_r-sit") + //CHOMPEdit End if(bellyup) icon_state = "[module_sprites[icontype]]-bellyup" + //CHOMPEdit Begin - Add ability to have sleeper belly sprites if available + if(sleeper_resting && sleeper_g == TRUE) + add_overlay("[module_sprites[icontype]]-sleeper_g-bellyup") + if(sleeper_resting && sleeper_r == TRUE) + add_overlay("[module_sprites[icontype]]-sleeper_r-bellyup") + //CHOMPEdit End else if(!sitting && !bellyup) icon_state = "[module_sprites[icontype]]-rest" + //CHOMPEdit Begin - Add ability to have sleeper belly sprites if available + if(sleeper_resting && sleeper_g == TRUE) + add_overlay("[module_sprites[icontype]]-sleeper_g-rest") + if(sleeper_resting && sleeper_r == TRUE) + add_overlay("[module_sprites[icontype]]-sleeper_r-rest") + //CHOMPEdit End else icon_state = "[module_sprites[icontype]]" if(dogborg == TRUE && stat == DEAD) @@ -159,6 +179,9 @@ icon = 'icons/mob/drakeborg/drakeborg_vr.dmi' else if(icontype == "Secborg model V-3" || icontype == "Mediborg model V-3") //CH edit icon = 'modular_chomp/icons/mob/widerobot_ch.dmi' + else if(icontype == "Cat" || icontype == "Cat Mining" || icontype == "Cat Cargo") // CHOMPEdit + icon = 'modular_chomp/icons/mob/catborg/catborg.dmi' + sleeper_resting = TRUE else icon = wideborg_dept return diff --git a/code/modules/mob/living/silicon/robot/subtypes/boozeborg_ch.dm b/code/modules/mob/living/silicon/robot/subtypes/boozeborg_ch.dm index 32b7fec8d1..2ab1cd5b0a 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/boozeborg_ch.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/boozeborg_ch.dm @@ -107,6 +107,8 @@ What Borgs are available is sadly handled in the above file in the proc R.old_x = -16 R.default_pixel_x = -16 R.dogborg = TRUE + R.vore_capacity = 1 + R.vore_capacity_ex = list("stomach" = 1) R.wideborg = TRUE R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill ..() diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index 347ce5502c..0f41e4ce41 100644 --- a/code/modules/mob/living/simple_mob/defense.dm +++ b/code/modules/mob/living/simple_mob/defense.dm @@ -48,7 +48,22 @@ if(I_HURT) var/armor = run_armor_check(def_zone = null, attack_flag = "melee") - apply_damage(damage = harm_intent_damage, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) + if(istype(L,/mob/living/carbon/human)) //VOREStation EDIT START Is it a human? + var/mob/living/carbon/human/attacker = L //We are a human! + var/datum/unarmed_attack/attack = attacker.get_unarmed_attack(src, BP_TORSO) //What attack are we using? Also, just default to attacking the chest. + var/rand_damage = rand(1, 5) //Like normal human attacks, let's randomize the damage... + var/real_damage = rand_damage //Let's go ahead and start calculating our damage. + var/hit_dam_type = attack.damage_type //Let's get the type of damage. Brute? Burn? Defined by the unarmed_attack. + real_damage += attack.get_unarmed_damage(attacker) //Add the damage that their special attack has. Some have 0. Some have 15. + if(real_damage <= damage_threshold) + L.visible_message("\The [L] uselessly hits \the [src]!") + L.do_attack_animation(src) + return + apply_damage(damage = real_damage, damagetype = hit_dam_type, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) + L.visible_message("\The [L] [pick(attack.attack_verb)] \the [src]!") + L.do_attack_animation(src) + return //VOREStation EDIT END + apply_damage(damage = harm_intent_damage, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) //VOREStation EDIT Somebody set this to burn instead of brute. L.visible_message("\The [L] [response_harm] \the [src]!") L.do_attack_animation(src) diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm index f4b63f4741..c9dd6dd461 100644 --- a/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/code/modules/mob/living/simple_mob/simple_mob.dm @@ -319,7 +319,7 @@ /mob/living/simple_mob/Bump(var/atom/A) if(mobcard && istype(A, /obj/machinery/door)) var/obj/machinery/door/D = A - if(!istype(D, /obj/machinery/door/firedoor) && !istype(D, /obj/machinery/door/blast) && !istype(D, /obj/machinery/door/airlock/lift) && D.check_access(mobcard)) + if(client && !istype(D, /obj/machinery/door/firedoor) && !istype(D, /obj/machinery/door/blast) && !istype(D, /obj/machinery/door/airlock/lift) && D.check_access(mobcard)) D.open() else ..() diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index e7866ec375..8bf15cea64 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -12,7 +12,8 @@ var/vore_active = 0 // If vore behavior is enabled for this mob - var/vore_capacity = 1 // The capacity (in people) this person can hold + //CHOMPEdit - Vore_capacity is now defined on living + vore_capacity = 1 // The capacity (in people) this person can hold var/vore_max_size = RESIZE_HUGE // The max size this mob will consider eating var/vore_min_size = RESIZE_TINY // The min size this mob will consider eating var/vore_bump_chance = 0 // Chance of trying to eat anyone that bumps into them, regardless of hostility @@ -40,9 +41,11 @@ var/vore_default_contamination_flavor = "Generic" //Contamination descriptors var/vore_default_contamination_color = "green" //Contamination color - var/vore_fullness = 0 // How "full" the belly is (controls icons) - var/vore_icons = 0 // Bitfield for which fields we have vore icons for. - var/vore_eyes = FALSE // For mobs with fullness specific eye overlays. + //CHOMPEDIT start - Moved to living + //var/vore_fullness = 0 // How "full" the belly is (controls icons) + //var/vore_icons = 0 // Bitfield for which fields we have vore icons for. + //var/vore_eyes = FALSE // For mobs with fullness specific eye overlays. + //CHOMPEDIT end. var/life_disabled = 0 // For performance reasons var/mount_offset_x = 5 // Horizontal riding offset. @@ -51,6 +54,7 @@ var/obj/item/device/radio/headset/mob_radio //Adminbus headset for simplemob shenanigans. does_spin = FALSE can_be_drop_pred = TRUE // Mobs are pred by default. + var/damage_threshold = 0 //For some mobs, they have a damage threshold required to deal damage to them. var/voremob_loaded = FALSE //CHOMPedit: On-demand belly loading. @@ -58,7 +62,8 @@ // Release belly contents before being gc'd! /mob/living/simple_mob/Destroy() release_vore_contents() - prey_excludes.Cut() + if(prey_excludes) + prey_excludes.Cut() return ..() //For all those ID-having mobs @@ -67,6 +72,7 @@ return myid // Update fullness based on size & quantity of belly contents +/* CHOMPEdit - moved to living /mob/living/simple_mob/proc/update_fullness() var/new_fullness = 0 for(var/obj/belly/B as anything in vore_organs) @@ -75,6 +81,7 @@ new_fullness = new_fullness / size_multiplier //Divided by pred's size so a macro mob won't get macro belly from a regular prey. new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry. vore_fullness = min(vore_capacity, new_fullness) +*/ /mob/living/simple_mob/update_icon() . = ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm index 3aa9f3691d..76ede95627 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm @@ -160,7 +160,7 @@ else to_chat(user, "\The [src] takes a bite of \the [O].") if(user != src) - to_chat(user, "\The [user] feeds \the [O] to you.") + to_chat(src, "\The [user] feeds \the [O] to you.") playsound(src, 'sound/items/eatfood.ogg', 75, 1) /mob/living/simple_mob/vore/alienanimals/catslug/attack_hand(mob/living/carbon/human/M as mob) @@ -714,7 +714,7 @@ //Admin-spawn only catslugs below - Expect overpowered things & silliness below //============================================================================= -//Deathsquad catslug +//Deathsquad catslug /mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/deathslug name = "Asset Purrtection" desc = "What are you doing staring at this angry little fella? Run." @@ -739,7 +739,7 @@ "bomb" = 40, "bio" = 100, "rad" = 100 - ) + ) minbodytemp = 0 maxbodytemp = 5000 @@ -751,8 +751,8 @@ mob_radio = new /obj/item/device/radio/headset/mob_headset(src) mob_radio.frequency = DTH_FREQ //Can't tell if bugged, deathsquad freq in general seems broken mobcard.access |= get_all_station_access() - -//Syndicate catslug + +//Syndicate catslug /mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/syndislug name = "Mercenyary" desc = "What are you doing staring at this crimson-hardsuit wearing angry little fella? Run." @@ -769,7 +769,7 @@ health = 100 taser_kill = 0 melee_damage_lower = 15 - melee_damage_upper = 20 + melee_damage_upper = 20 mob_size = MOB_MEDIUM //Something something hardsuits are heavy. siemens_coefficient = 0 armor = list( @@ -780,7 +780,7 @@ "bomb" = 80, "bio" = 100, "rad" = 60 - ) + ) minbodytemp = 0 maxbodytemp = 5000 @@ -797,7 +797,7 @@ mob_radio.recalculateChannels(1) mobcard.access |= get_all_station_access() -//ERT catslug +//ERT catslug /mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/responseslug name = "Emeowgency Responder" desc = "The cavalry has arrived." @@ -822,7 +822,7 @@ "bomb" = 30, "bio" = 100, "rad" = 100 - ) + ) minbodytemp = 0 maxbodytemp = 5000 @@ -834,7 +834,7 @@ /mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/responseslug/Initialize() . = ..() mob_radio = new /obj/item/device/radio/headset/mob_headset(src) - mob_radio.frequency = ERT_FREQ + mob_radio.frequency = ERT_FREQ mob_radio.centComm = 1 mob_radio.ks2type = /obj/item/device/encryptionkey/ert mob_radio.keyslot2 = new /obj/item/device/encryptionkey/ert(mob_radio) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm index a3f6e3d622..13b88dd2e2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm @@ -192,7 +192,7 @@ . = ..() icon_living = "spookyghost-[rand(1,2)]" icon_state = icon_living - addtimer(CALLBACK(src, .proc/death), 2 MINUTES) + addtimer(CALLBACK(src, .proc/death), 35 SECONDS) update_icon() /datum/ai_holder/simple_mob/melee/space_ghost diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm index fd1db82577..0660735db4 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm @@ -876,18 +876,6 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? speak_chance = 0.5 wander = TRUE -/datum/language/teppi - name = "Teppi" - desc = "The language of the meat things." - speech_verb = "rumbles" - ask_verb = "tilts" - exclaim_verb = "roars" - key = "i" - flags = RESTRICTED - machine_understands = 0 - space_chance = 100 - syllables = list("gyoh", "snoof", "gyoooooOOOooh", "iuuuuh", "gyuuuuh") - ////////////////// Da babby ////////////// /mob/living/simple_mob/vore/alienanimals/teppi/baby diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm index 6845a51e1e..fb34c4d73f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm @@ -123,8 +123,8 @@ var/obj/effect/spider/cocoon/C = new(AM.loc) var/large_cocoon = FALSE for(var/mob/living/L in C.loc) - if(istype(L, /mob/living/simple_mob/animal/giant_spider)) // Cannibalism is bad. - continue + //if(istype(L, /mob/living/simple_mob/animal/giant_spider)) // Cannibalism is bad. CHOMPEdit BUT IT'S NEEDED TO STOP COCOON BOMBS! + // continue // UNLESS YOU WANT TO FIGURE OUT THE AI TARGETING YOURSELF! TODO TODO TODO. fed++ visible_message(span("warning","\The [src] sticks a proboscis into \the [L], and sucks a viscous substance out.")) to_chat(src, span("notice", "You've fed upon \the [L], and can now lay [fed] cluster\s of eggs.")) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm index 60520b51e5..1015f8653d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm @@ -83,7 +83,7 @@ if( ishuman(AM) ) if(!stat) var/mob/M = AM - M.visible_message("[bicon(src)] Squeek!") + M.visible_message("\icon[src][bicon(src)] Squeek!") playsound(src, 'sound/effects/mouse_squeak.ogg', 35, 1) ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm index 954279ab76..2702bf9c78 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse_vr.dm @@ -1,9 +1,9 @@ /mob/living/simple_mob/animal/passive/mouse nutrition = 20 //To prevent draining maint mice for infinite food. Low nutrition has no mechanical effect on simplemobs, so wont hurt mice themselves. - - no_vore = TRUE //Mice can't eat others due to the amount of bugs caused by it. vore_taste = "cheese" + restrict_vore_ventcrawl = TRUE + can_pull_size = ITEMSIZE_TINY // Rykka - Uncommented these. Not sure why they were commented out in the original Polaris files, maybe a mob rework mistake? can_pull_mobs = MOB_PULL_NONE // Rykka - Uncommented these. Not sure why they were commented out in the original Polaris files, maybe a mob rework mistake? diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm index c4f41bd3ba..840b424994 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm @@ -47,4 +47,12 @@ add_modifier(/datum/modifier/berserk, 30 SECONDS) /decl/mob_organ_names/goose - hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing", "neck") \ No newline at end of file + hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing", "neck") + +/mob/living/simple_mob/animal/space/goose/white + icon = 'icons/mob/animal_vr.dmi' + icon_state = "whitegoose" + icon_living = "whitegoose" + icon_dead = "whitegoose_dead" + name = "white goose" + desc = "And just when you thought it was a lovely day..." \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm index 6303a5ddf3..76df7a2382 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/mouse_army_ch.dm @@ -35,8 +35,8 @@ //Mob melee settings melee_damage_lower = 5 melee_damage_upper = 15 - list/attacktext = list("attacked", "chomped", "gnawed on") - list/friendly = list("baps", "nuzzles") + attacktext = list("attacked", "chomped", "gnawed on") + friendly = list("baps", "nuzzles") attack_armor_type = "melee" attack_sharp = 1 attack_edge = 1 @@ -459,4 +459,4 @@ ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting /mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator/manned - pilot_type = /mob/living/simple_mob/animal/space/mouse_army/ammo \ No newline at end of file + pilot_type = /mob/living/simple_mob/animal/space/mouse_army/ammo diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm index 5e05b5562d..b2f981c7fd 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm @@ -175,7 +175,7 @@ /mob/living/simple_mob/humanoid/merc/ranged/smg/sol icon_state = "bluforranged_smg" - icon_living = "blueforranged_smg" + icon_living = "bluforranged_smg" //CHOMPEdit - Fixes typo that makes smg mercs invis sometimes corpse = /obj/effect/landmark/mobcorpse/solarpeacekeeper loot_list = list(/obj/item/weapon/gun/projectile/automatic/c20r = 100) @@ -429,4 +429,4 @@ /obj/random/projectile/scrapped_grenadelauncher = 100, /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 50, /obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary = 30 - ) \ No newline at end of file + ) diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm index e43caff8c3..eaa796f45c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm @@ -13,6 +13,7 @@ turn_sound = 'sound/mecha/mechturn.ogg' maxHealth = 300 mob_size = MOB_LARGE + damage_threshold = 5 //Anything that's 5 or less damage will not do damage. organ_names = /decl/mob_organ_names/mecha diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm index 33d2494884..83910850e3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm @@ -25,7 +25,7 @@ softfall = TRUE //Beings made of Hellmarble and powered by the tears of the damned are not concerned with mortal things such as 'gravity'. parachuting = TRUE - has_langs = list(LANGUAGE_GALCOM, LANGUAGE_CULT, LANGUAGE_OCCULT) + has_langs = list(LANGUAGE_GALCOM, LANGUAGE_CULT) has_eye_glow = TRUE diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm index 133468761c..4509634757 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon.dm @@ -318,6 +318,7 @@ I think I covered everything. update_fullness() build_icons() +/* CHOMPEDIT - removed /mob/living/simple_mob/vore/bigdragon/update_fullness() var/new_fullness = 0 // Only count stomachs to fullness @@ -328,6 +329,7 @@ I think I covered everything. new_fullness /= size_multiplier new_fullness = round(new_fullness, 1) vore_fullness = min(vore_capacity, new_fullness) +*/ /mob/living/simple_mob/vore/bigdragon/proc/build_icons(var/random) cut_overlays() @@ -505,6 +507,7 @@ I think I covered everything. /mob/living/simple_mob/vore/bigdragon/init_vore() var/obj/belly/B = new /obj/belly/dragon/maw(src) + B.affects_vore_sprites = FALSE //CHOMPEdit - Added so that the new system handles these not affecting the sprite. B.emote_lists[DM_HOLD] = list( "The dragon's breath continues to pant over you rhythmically, each exhale carrying a bone-shivering growl", "The thick, heavy tongue lifts, curling around you, cramming you tightly against it's teeth, to squeeze some flavor out of you.", @@ -514,6 +517,7 @@ I think I covered everything. gut1 = B vore_selected = B B = new /obj/belly/dragon/throat(src) + B.affects_vore_sprites = FALSE //CHOMPEdit - Added so that the new system handles these not affecting the sprite. B.emote_lists[DM_HOLD] = list( "Gggllrrrk! Another loud, squelching swallow rings out in your ears, dragging you a little deeper into the furnace-like humid heat of the dragon's body.", "Nestling in a still throat for a moment, you feel the walls quiver and undulate excitedly in tune with the beast's heartbeat.", @@ -529,6 +533,7 @@ I think I covered everything. "The constant, rhythmic kneading and massaging starts to take its toll along with the muggy heat, making you feel weaker and weaker!", "The drake happily wanders around while digesting its meal, almost like it is trying to show off the hanging gut you've given it.") B = new /obj/belly/dragon/maw/heal(src) + B.affects_vore_sprites = FALSE //CHOMPEdit - Added so that the new system handles these not affecting the sprite. B.emote_lists[DM_HEAL] = list( "Gently, the dragon's hot, bumpy tongue cradles you, feeling like a slime-soaked memory-foam bed, twitching with life. The delicacy that the dragon holds you with is quite soothing.", "The wide, slick throat infront of you constantly quivers and undulates. Every hot muggy exhale of the beast makes that throat spread, ropes of slime within it's hold shivering in the flow, inhales causing it to clench up somewhat.", @@ -537,6 +542,7 @@ I think I covered everything. "Saliva soaks the area all around you thickly, lubricating absolutely everything with the hot liquid. From time to time, the beast carefully shifts the rear of it's tongue to piston a cache of the goop down the hatch. The throat seen clenching tightly shut, the tongue's rear bobbing upwards, before down again - showing off a freshly slime-soaked entrance.") gut2 = B B = new /obj/belly/dragon/throat/heal(src) + B.affects_vore_sprites = FALSE //CHOMPEdit - Added so that the new system handles these not affecting the sprite. B.emote_lists[DM_HEAL] = list( "The tunnel of the gullet closely wraps around you, mummifying you in a hot writhing embrace of silky flesh. The walls are slick, soaked in a lubricating slime, and so very warm.", "The walls around you pulse in time with the dragon's heartbeat, which itself pounds in your ears. Rushing wind of calm breaths fill the gaps, and distant squelches of slimy payloads shifted around by soft flesh echo down below.", diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm index 41c034804e..d5637190d3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/bigdragon_ch.dm @@ -344,7 +344,7 @@ I think I covered everything. update_fullness() build_icons() -/mob/living/simple_mob/vore/bigdragon/update_fullness() +/* /mob/living/simple_mob/vore/bigdragon/update_fullness() var/new_fullness = 0 // Only count stomachs to fullness for(var/obj/belly/B in vore_organs) @@ -354,6 +354,7 @@ I think I covered everything. new_fullness /= size_multiplier new_fullness = round(new_fullness, 1) vore_fullness = min(vore_capacity, new_fullness) + */ /mob/living/simple_mob/vore/bigdragon/proc/build_icons(var/random) cut_overlays() @@ -534,6 +535,7 @@ I think I covered everything. if(!voremob_loaded) return var/obj/belly/B = new /obj/belly/dragon/maw(src) + B.affects_vore_sprites = FALSE B.emote_lists[DM_HOLD] = list( "The dragon's breath continues to pant over you rhythmically, each exhale carrying a bone-shivering growl", "The thick, heavy tongue lifts, curling around you, cramming you tightly against it's teeth, to squeeze some flavor out of you.", @@ -543,6 +545,7 @@ I think I covered everything. gut1 = B vore_selected = B B = new /obj/belly/dragon/throat(src) + B.affects_vore_sprites = FALSE B.emote_lists[DM_HOLD] = list( "Gggllrrrk! Another loud, squelching swallow rings out in your ears, dragging you a little deeper into the furnace-like humid heat of the dragon's body.", "Nestling in a still throat for a moment, you feel the walls quiver and undulate excitedly in tune with the beast's heartbeat.", @@ -558,6 +561,7 @@ I think I covered everything. "The constant, rhythmic kneading and massaging starts to take its toll along with the muggy heat, making you feel weaker and weaker!", "The drake happily wanders around while digesting its meal, almost like it is trying to show off the hanging gut you've given it.") B = new /obj/belly/dragon/maw/heal(src) + B.affects_vore_sprites = FALSE B.emote_lists[DM_HEAL] = list( "Gently, the dragon's hot, bumpy tongue cradles you, feeling like a slime-soaked memory-foam bed, twitching with life. The delicacy that the dragon holds you with is quite soothing.", "The wide, slick throat infront of you constantly quivers and undulates. Every hot muggy exhale of the beast makes that throat spread, ropes of slime within it's hold shivering in the flow, inhales causing it to clench up somewhat.", @@ -566,6 +570,7 @@ I think I covered everything. "Saliva soaks the area all around you thickly, lubricating absolutely everything with the hot liquid. From time to time, the beast carefully shifts the rear of it's tongue to piston a cache of the goop down the hatch. The throat seen clenching tightly shut, the tongue's rear bobbing upwards, before down again - showing off a freshly slime-soaked entrance.") gut2 = B B = new /obj/belly/dragon/throat/heal(src) + B.affects_vore_sprites = FALSE B.emote_lists[DM_HEAL] = list( "The tunnel of the gullet closely wraps around you, mummifying you in a hot writhing embrace of silky flesh. The walls are slick, soaked in a lubricating slime, and so very warm.", "The walls around you pulse in time with the dragon's heartbeat, which itself pounds in your ears. Rushing wind of calm breaths fill the gaps, and distant squelches of slimy payloads shifted around by soft flesh echo down below.", diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm b/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm index e4e58f75dc..4b36fb7b1e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm @@ -39,7 +39,7 @@ "rad" = 0 ) - has_langs = list("Coulrian") + has_langs = list("Animal") /mob/living/simple_mob/animal/passive/honkpet/attack_hand(mob/living/user as mob) if(user.a_intent == I_DISARM) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_ch.dm b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_ch.dm index b57d7e23a2..f65767a892 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_ch.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_ch.dm @@ -18,7 +18,7 @@ has_hands = TRUE seedarkness = FALSE attack_sound = 'sound/misc/demonattack.ogg' - has_langs = list(LANGUAGE_GALCOM,LANGUAGE_SHADEKIN,LANGUAGE_CULT) + has_langs = list(LANGUAGE_GALCOM,LANGUAGE_DAEMON,LANGUAGE_SHADEKIN,LANGUAGE_CULT) melee_damage_lower = 20 melee_damage_upper = 15 @@ -150,4 +150,4 @@ /mob/living/simple_mob/vore/demon/adjustFireLoss(amount,include_robo = TRUE) amount = 0 - amount src.adjustBruteLoss(amount) - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm index 7f525c8310..15a86126c2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm @@ -28,8 +28,11 @@ // Vore tags vore_active = 1 vore_capacity = 1 + vore_capacity_ex = list("stomach" = 1, "tail" = 1) + vore_fullness_ex = list("stomach" = 0, "tail" = 0) vore_bump_emote = "coils their tail around" vore_icons = 0 + vore_icon_bellies = list("stomach", "tail") // Default stomach vore_stomach_name = "upper stomach" vore_stomach_flavor = "You've ended up inside of the lamia's human stomach. It's pretty much identical to any human stomach, but the valve leading deeper is much bigger." @@ -51,6 +54,7 @@ say_list_type = /datum/say_list/lamia ai_holder_type = /datum/ai_holder/simple_mob/passive +/* CHOMPEdit - now handled by new belly features. /mob/living/simple_mob/vore/lamia/update_fullness() var/new_fullness = 0 // We only want to count our upper_stomach towards capacity @@ -61,6 +65,7 @@ new_fullness /= size_multiplier new_fullness = round(new_fullness, 1) vore_fullness = min(vore_capacity, new_fullness) +*/ /mob/living/simple_mob/vore/lamia/update_icon() . = ..() @@ -72,6 +77,7 @@ // And copper_vore_1_0 is full upper stomach, but empty tail stomach // For unconscious: [icon_rest]_vore_[upper]_[tail] // For dead, it doesn't show. + /* CHOMPEdit - Handled differently now. var/upper_shows = FALSE var/tail_shows = FALSE @@ -89,6 +95,9 @@ upper_shows = TRUE else if(B.name == "tail stomach") tail_shows = TRUE + */ + var/upper_shows = vore_fullness_ex["stomach"] + var/tail_shows = vore_fullness_ex["tail"] if(upper_shows || tail_shows) if((stat == CONSCIOUS) && (!icon_rest || !resting || !incapacitated(INCAPACITATION_DISABLED))) @@ -98,6 +107,7 @@ else if(((stat == UNCONSCIOUS) || resting || incapacitated(INCAPACITATION_DISABLED) ) && icon_rest) icon_state = "[icon_rest]_vore_[upper_shows]_[tail_shows]" + /mob/living/simple_mob/vore/lamia/init_vore() if(!voremob_loaded) return @@ -126,6 +136,7 @@ tail.human_prey_swallow_time = swallowTime tail.nonhuman_prey_swallow_time = swallowTime tail.vore_verb = "stuff" + tail.belly_sprite_to_affect = "tail" tail.emote_lists[DM_HOLD] = B.emote_lists[DM_HOLD].Copy() tail.emote_lists[DM_DIGEST] = B.emote_lists[DM_DIGEST].Copy() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm index 3feecd4d03..23bf4e8444 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm @@ -59,6 +59,7 @@ var/global/list/moth_amount = 0 // Chompstation Addition, Rykka waz here. *pawst var/obj/structure/cable/attached // the attached cable var/shock_chance = 10 // Beware var/powerdraw = 100000 // previous value 150000 // CHOMPStation Addition, Rykka waz here. *pawstamp* + var/tracked = FALSE /datum/say_list/solargrub emote_see = list("squelches", "squishes") diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm index 0589a35391..454b4cafcd 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm @@ -47,6 +47,8 @@ var/global/list/grub_machine_overlays = list() var/obj/machinery/abstract_grub_machine/powermachine var/power_drained = 0 + var/tracked = FALSE + ai_holder_type = /datum/ai_holder/simple_mob/solargrub_larva /mob/living/simple_mob/animal/solargrub_larva/New() @@ -173,7 +175,8 @@ var/global/list/grub_machine_overlays = list() /mob/living/simple_mob/animal/solargrub_larva/proc/expand_grub() eject_from_machine() visible_message("\The [src] suddenly balloons in size!") - new /mob/living/simple_mob/vore/solargrub(get_turf(src)) + var/mob/living/simple_mob/vore/solargrub/adult = new(get_turf(src)) + adult.tracked = tracked // grub.power_drained = power_drained //TODO qdel(src) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm index 4dc8c04caa..ff6d6636ac 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm @@ -11,6 +11,31 @@ verbs |= /mob/living/simple_mob/proc/set_name verbs |= /mob/living/simple_mob/proc/set_desc + ooc_notes = client.prefs.metadata + digestable = client.prefs_vr.digestable + devourable = client.prefs_vr.devourable + absorbable = client.prefs_vr.absorbable + feeding = client.prefs_vr.feeding + can_be_drop_prey = client.prefs_vr.can_be_drop_prey + can_be_drop_pred = client.prefs_vr.can_be_drop_pred + latejoin_vore = client.prefs_vr.latejoin_vore //CHOMPedit + allow_spontaneous_tf = client.prefs_vr.allow_spontaneous_tf + digest_leave_remains = client.prefs_vr.digest_leave_remains + allowmobvore = client.prefs_vr.allowmobvore + permit_healbelly = client.prefs_vr.permit_healbelly + noisy = client.prefs_vr.noisy + selective_preference = client.prefs_vr.selective_preference + + drop_vore = client.prefs_vr.drop_vore + stumble_vore = client.prefs_vr.stumble_vore + slip_vore = client.prefs_vr.slip_vore + + resizable = client.prefs_vr.resizable + show_vore_fx = client.prefs_vr.show_vore_fx + step_mechanics_pref = client.prefs_vr.step_mechanics_pref + pickup_pref = client.prefs_vr.pickup_pref + + /mob/living/simple_mob/proc/set_name() set name = "Set Name" set desc = "Sets your mobs name. You only get to do this once." @@ -30,7 +55,7 @@ set desc = "Set your description." set category = "Abilities" var/newdesc - newdesc = sanitizeSafe(tgui_input_text(src,"Set your description. Max 4096 chars.", "Description set",""), MAX_MESSAGE_LEN) + newdesc = sanitizeSafe(tgui_input_text(src,"Set your description. Max 4096 chars.", "Description set","", prevent_enter = TRUE), MAX_MESSAGE_LEN) if(newdesc) desc = newdesc diff --git a/code/modules/mob/living/voice/voice.dm b/code/modules/mob/living/voice/voice.dm index 0e9e805dc9..2752292ee2 100644 --- a/code/modules/mob/living/voice/voice.dm +++ b/code/modules/mob/living/voice/voice.dm @@ -83,7 +83,7 @@ var/new_name = sanitizeSafe(tgui_input_text(src, "Who would you like to be now?", "Communicator", src.client.prefs.real_name, MAX_NAME_LEN), MAX_NAME_LEN) if(new_name) if(comm) - comm.visible_message("[bicon(comm)] [src.name] has left, and now you see [new_name].") + comm.visible_message("\icon[comm][bicon(comm)] [src.name] has left, and now you see [new_name].") //Do a bit of logging in-case anyone tries to impersonate other characters for whatever reason. var/msg = "[src.client.key] ([src]) has changed their communicator identity's name to [new_name]." message_admins(msg) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index a5b81d0f8a..c36a48f13f 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -132,7 +132,7 @@ // Emulates targetting a specific body part, and miss chances // May return null if missed // miss_chance_mod may be negative. -/proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0, var/ranged_attack=0) +/proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0, var/ranged_attack=0, var/force_hit = FALSE) zone = check_zone(zone) if(!ranged_attack) @@ -144,6 +144,9 @@ if(G.state >= GRAB_AGGRESSIVE) return zone + if(force_hit) + return zone + var/miss_chance = 10 if (zone in base_miss_chance) miss_chance = base_miss_chance[zone] diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 906dab7909..c152c80b12 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -369,7 +369,7 @@ popup.set_content(dat) popup.open() -/mob/new_player/proc/time_till_respawn() +/mob/proc/time_till_respawn() if(!ckey) return -1 // What? @@ -389,14 +389,21 @@ /mob/new_player/proc/IsJobAvailable(rank) var/datum/job/job = job_master.GetJob(rank) - if(!job) return 0 - if(!job.is_position_available()) return 0 - if(jobban_isbanned(src,rank)) return 0 - if(!job.player_old_enough(src.client)) return 0 + if(!job) + return 0 + if(!job.is_position_available()) + return 0 + if(jobban_isbanned(src,rank)) + return 0 + if(!job.player_old_enough(src.client)) + return 0 //VOREStation Add - if(!job.player_has_enough_playtime(src.client)) return 0 - if(!is_job_whitelisted(src,rank)) return 0 - if(!job.player_has_enough_pto(src.client)) return 0 + if(!job.player_has_enough_playtime(src.client)) + return 0 + if(!is_job_whitelisted(src,rank)) + return 0 + if(!job.player_has_enough_pto(src.client)) + return 0 //VOREStation Add End return 1 diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index e564bba7b0..c2e5a31951 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -205,6 +205,8 @@ // Determine what job is marked as 'High' priority, and dress them up as such. if(job_civilian_low & ASSISTANT) previewJob = job_master.GetJob(USELESS_JOB) + else if(ispAI(client.mob)) //VOREStation Edit! - pAIs shouldn't wear job gear~! + //Don't do anything! else for(var/datum/job/job in job_master.occupations) var/job_flag diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm index 62f0bfeda3..bb95f69575 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -851,3 +851,12 @@ extra_overlay = "bunny-tall-inner" do_colouration = 1 color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/altevian + name = "Altevian Ears" + desc = "" + icon = 'icons/mob/vore/ears_vr.dmi' + icon_state = "altevian" + extra_overlay = "altevian-inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/mob/new_player/sprite_accessories_extra_ch.dm b/code/modules/mob/new_player/sprite_accessories_extra_ch.dm index 1a7c779bf6..72af2eb90a 100644 --- a/code/modules/mob/new_player/sprite_accessories_extra_ch.dm +++ b/code/modules/mob/new_player/sprite_accessories_extra_ch.dm @@ -148,67 +148,66 @@ color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) - guilmonhead +/datum/sprite_accessory/marking/ch/guilmonhead name = "Guilmon head" icon_state = "guilmon_head" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) - guilmonchest +/datum/sprite_accessory/marking/ch/guilmonchest name = "Guilmon Chest" icon_state = "guilmon_chest" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO) - guilmonchestmarking +/datum/sprite_accessory/marking/ch/guilmonchestmarking name = "Guilmon Chest Markings" icon_state = "guilmon_marking" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_TORSO) - guilmonarms +/datum/sprite_accessory/marking/ch/guilmonarms name = "Guilmon arms" icon_state = "guilmon" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND) - guilmonRLeg +/datum/sprite_accessory/marking/ch/guilmonRLeg name = "Guilmon Right leg" icon_state = "guilmon" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_LEG) - guilmonLleg +/datum/sprite_accessory/marking/ch/guilmonLleg name = "Guilmon Left leg" icon_state = "guilmon" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG) - guilmondigiRleg1 +/datum/sprite_accessory/marking/ch/guilmondigiRleg1 name = "Guilmon digigrade right leg 1" icon_state = "guilmon_digitigrade_1" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_LEG) - guilmondigiLleg1 +/datum/sprite_accessory/marking/ch/guilmondigiLleg1 name = "Guilmon digigrade left leg 1" icon_state = "guilmon_digitigrade_1" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG) - guilmondigiRleg2 +/datum/sprite_accessory/marking/ch/guilmondigiRleg2 name = "Guilmon digigrade right leg 2" icon_state = "guilmon_digitigrade_2" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_R_LEG) - guilmondigiLleg2 +/datum/sprite_accessory/marking/ch/guilmondigiLleg2 name = "Guilmon digigrade left leg 2" icon_state = "guilmon_digitigrade_2" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_L_LEG) - /datum/sprite_accessory/tail/special/orca_tail name = "Orca Tail" desc = "" @@ -218,7 +217,6 @@ color_blend_mode = ICON_MULTIPLY species_allowed = list(SPECIES_AKULA) -//TFF 16/1/20 - Cotton hair backport /datum/sprite_accessory/hair/ch icon = 'modular_chomp/icons/mob/human_face_ch.dmi' icon_add = 'modular_chomp/icons/mob/human_face_ch_add.dmi' @@ -434,4 +432,53 @@ name = "Teshari large eyes (Heterochromia)" icon_state = "teshlarge_eyes_het" color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_HEAD) \ No newline at end of file + body_parts = list(BP_HEAD) + +// Nightstalker Body Markings +/datum/sprite_accessory/marking/ch/desert_nightstalker + name = "Nightstalker Scales (Desert Coloration)" + icon_state = "nightstalker_desert" + body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT,BP_TORSO,BP_GROIN) // Fullbody markings, save head + do_colouration = 0 // Don't color, these are pre-colored markings + +/datum/sprite_accessory/marking/ch/desert_nightstalker_head + name = "Nightstalker Head (Desert Coloration)" + icon_state = "nightstalker_desert" + body_parts = list(BP_HEAD) + do_colouration = 0 // Don't color, these are pre-colored markings + +/datum/sprite_accessory/marking/ch/nightstalker_head_center + name = "Nightstalker Head, Tricolor (Center)" + icon_state = "nightstalker_1" + body_parts = list(BP_HEAD) + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/marking/ch/nightstalker_head_left + name = "Nightstalker Head, Tricolor (Left)" + icon_state = "nightstalker_2" + body_parts = list(BP_HEAD) + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/marking/ch/nightstalker_head_right + name = "Nightstalker Head, Tricolor (Right)" + icon_state = "nightstalker_3" + body_parts = list(BP_HEAD) + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/marking/ch/diamondback_nightstalker_outer + name = "Nightstalker Scales, Outer" + icon_state = "nightstalker_1" + body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT,BP_TORSO,BP_GROIN) // Fullbody markings, save head + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/marking/ch/diamondback_nightstalker_inner + name = "Nightstalker Scales, Inner" + icon_state = "nightstalker_2" + body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_LEG,BP_L_LEG,BP_TORSO,BP_GROIN) // Fullbody markings, save head + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/marking/ch/outer_spots + name = "Spots, Outer" + icon_state = "spots_extremities" + body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT) + color_blend_mode = ICON_MULTIPLY \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm index 742480858c..aa01f6c465 100644 --- a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm @@ -3,7 +3,7 @@ /datum/sprite_accessory/marking //Override for base markings color_blend_mode = ICON_ADD - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use /datum/sprite_accessory/marking/vr_vulp_belly name = "belly fur (Vulp)" @@ -850,4 +850,39 @@ icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "thunderthighs" color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_L_LEG,BP_R_LEG) \ No newline at end of file + body_parts = list(BP_L_LEG,BP_R_LEG) + +/datum/sprite_accessory/marking/vr_altevian_snout + name = "Altevian Snout" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-snout" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_altevian_chin + name = "Altevian Chin" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-chin" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_altevian_nose + name = "Altevian Nose" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-nose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_altevian_fangs + name = "Altevian Fangs" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-fangs" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_altevian_incisors + name = "Altevian Incisors" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-incisors" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_tail.dm b/code/modules/mob/new_player/sprite_accessories_tail.dm index 4ba3d6b485..8428f6170f 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail.dm @@ -25,6 +25,10 @@ var/clip_mask_state = null //Icon state to generate clip mask. Clip mask is used to 'clip' off the lower part of clothing such as jumpsuits & full suits. var/icon/clip_mask = null //Instantiated clip mask of given icon and state + // VOREStation Edit: Taur Loafing + var/can_loaf = FALSE + var/loaf_offset = 0 + //species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) //Removing Polaris whitelits, ones we need are defined in our files /datum/sprite_accessory/tail/New() diff --git a/code/modules/mob/new_player/sprite_accessories_tail_ch.dm b/code/modules/mob/new_player/sprite_accessories_tail_ch.dm index efe3a48418..8ffb4054c4 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_ch.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_ch.dm @@ -141,4 +141,20 @@ icon_state = "bigringtail" do_colouration = 1 color_blend_mode = ICON_MULTIPLY - extra_overlay = "bigringtail_markings" \ No newline at end of file + extra_overlay = "bigringtail_markings" + +/datum/sprite_accessory/tail/longtail/desert_nightstalker + name = "Desert Nightstalker Tail (vwag)" + icon = 'icons/mob/vore/taurs_ch.dmi' + icon_state = "nightstalker_desert" + ani_state = "nightstalker_desert_w" + do_colouration = 0 // We're not coloring this, these are pre-colored + color_blend_mode = ICON_ADD + +/datum/sprite_accessory/tail/longtail/diamondback_nightstalker + name = "Diamondback Nightstalker Tail (dual-color, vwag)" + icon = 'icons/mob/vore/taurs_ch.dmi' + icon_state = "nightstalker_diamondback" + ani_state = "nightstalker_diamondback_w" + extra_overlay = "nightstalker_diamondback_markings" + extra_overlay_w = "nightstalker_diamondback_markings_w" \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm index 82459ead5d..b44ed20cb5 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm @@ -11,6 +11,8 @@ do_colouration = 0 //Set to 1 to enable coloration using the tail color. species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use + var/list/lower_layer_dirs = list(SOUTH) + /datum/sprite_accessory/tail/New() . = ..() if(clip_mask_icon && clip_mask_state) @@ -1174,6 +1176,14 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY ckeys_allowed = list("prettiebyrd") + +/datum/sprite_accessory/tail/altevian + name = "Altevian Tail" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "altevian" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + lower_layer_dirs = list(SOUTH, WEST) /datum/sprite_accessory/tail/tentacle name = "Tentacle, colorable (vwag)" diff --git a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm index c4afe4301d..22f01db12d 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm @@ -421,6 +421,8 @@ /// suit_sprites = 'icons/mob/taursuits_drake_vr.dmi' ///Chomp edit suit_sprites = 'icons/mob/taursuits_drake_ch.dmi' icon_sprite_tag = "drake" + can_loaf = TRUE // VOREStation Edit: Taur Loafing + loaf_offset = 6 // VOREStation Edit: Taur Loafing /datum/sprite_accessory/tail/taur/ch/fatdrake name = "Drake (Fat Taur dual-color)" @@ -616,4 +618,4 @@ extra_overlay2 = "noodle_markings_2" suit_sprites = 'icons/mob/taursuits_noodle_vr.dmi' clip_mask_state = "taur_clip_mask_noodle" - icon_sprite_tag = "noodle" \ No newline at end of file + icon_sprite_tag = "noodle" diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index ec7d7d7079..8316425ea8 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -5,8 +5,7 @@ // would require us to exclude that datum from the global list. /datum/sprite_accessory/hair - - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_SHADEKIN_YW) //This lets all races use the default hairstyles. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_SHADEKIN_YW, SPECIES_ALTEVIAN) //This lets all races use the default hairstyles. /datum/sprite_accessory/hair/astolfo name = "Astolfo" @@ -91,7 +90,7 @@ name = "Bald" icon_state = "bald" gender = MALE - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //Lets all the races be bald if they want. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //Lets all the races be bald if they want. /datum/sprite_accessory/hair/ponytail6_fixed name = "Ponytail 6 but fixed" @@ -471,20 +470,20 @@ /datum/sprite_accessory/facial_hair icon = 'icons/mob/human_face_or_vr.dmi' color_blend_mode = ICON_MULTIPLY - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use the facial hair styles. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use the facial hair styles. /datum/sprite_accessory/facial_hair/shaved name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use the facial hair styles. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use the facial hair styles. /datum/sprite_accessory/facial_hair/neck_fluff name = "Neck Fluff" icon = 'icons/mob/human_face_or_vr.dmi' icon_state = "facial_neckfluff" gender = NEUTER - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) /datum/sprite_accessory/facial_hair/vulp_none name = "None" diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index da3a677d49..ceda101ede 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -116,9 +116,9 @@ else if(!(other.loc in view(src))) return FALSE else if(istype(src.loc, /obj/item/weapon/holder)) - if(!other in view(src.loc.loc)) + if((!other) in view(src.loc.loc)) return FALSE - else if(!other in view(src)) + else if((!other) in view(src)) return FALSE //CHOMPEdit End diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index bd338109b4..a43406eb48 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -67,6 +67,9 @@ else spawn(0) M.show_message(message, 2) + if(M.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes to subtle emotes to use mob voice instead + M << sound(pick(voice_sounds_list), volume = 25) for(var/obj/O as anything in vis_objs) spawn(0) @@ -145,10 +148,16 @@ else pb = db.pred_body to_chat(pb, "The captive mind of \the [M] thinks, \"[message]\"") //To our pred if dominated brain + if(pb.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + pb << sound(pick(voice_sounds_list), volume = 25) f = TRUE else if(M.absorbed && isbelly(M.loc)) pb = M.loc.loc to_chat(pb, "\The [M] thinks, \"[message]\"") //To our pred if absorbed + if(pb.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + pb << sound(pick(voice_sounds_list), volume = 25) f = TRUE if(pb) //We are prey, let's do the prey thing. @@ -157,11 +166,17 @@ if(istype(I, /mob/living/dominated_brain) && I != M) var/mob/living/dominated_brain/db = I to_chat(db, "The captive mind of \the [M] thinks, \"[message]\"") //To any dominated brains in the pred + if(db.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + db << sound(pick(voice_sounds_list), volume = 25) f = TRUE for(var/B in pb.vore_organs) for(var/mob/living/L in B) if(L.absorbed && L != M && L.ckey) to_chat(L, "\The [M] thinks, \"[message]\"") //To any absorbed people in the pred + if(L.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + L << sound(pick(voice_sounds_list), volume = 25) f = TRUE //Let's also check and see if there's anyone inside of us to send the message to. @@ -169,18 +184,30 @@ if(istype(I, /mob/living/dominated_brain)) var/mob/living/dominated_brain/db = I to_chat(db, "\The [M] thinks, \"[message]\"") //To any dominated brains inside us + if(db.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + db << sound(pick(voice_sounds_list), volume = 25) f = TRUE for(var/B in M.vore_organs) for(var/mob/living/L in B) if(L.absorbed) to_chat(L, "\The [M] thinks, \"[message]\"") //To any absorbed people inside us + if(L.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + L << sound(pick(voice_sounds_list), volume = 25) f = TRUE if(f) //We found someone to send the message to if(pb) to_chat(M, "You think \"[message]\"") //To us if we are the prey + if(M.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + M << sound(pick(voice_sounds_list), volume = 25) else to_chat(M, "You think \"[message]\"") //To us if we are the pred + if(M.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + M << sound(pick(voice_sounds_list), volume = 25) for (var/mob/G in player_list) if (istype(G, /mob/new_player)) continue @@ -225,11 +252,17 @@ else pb = db.pred_body to_chat(pb, "\The [M] [message]") //To our pred if dominated brain + if(pb.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + pb << sound(pick(voice_sounds_list), volume = 25) f = TRUE else if(M.absorbed && isbelly(M.loc)) pb = M.loc.loc to_chat(pb, "\The [M] [message]") //To our pred if absorbed + if(pb.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + pb << sound(pick(voice_sounds_list), volume = 25) f = TRUE if(pb) //We are prey, let's do the prey thing. @@ -238,11 +271,17 @@ if(istype(I, /mob/living/dominated_brain) && I != M) var/mob/living/dominated_brain/db = I to_chat(db, "\The [M] [message]") //To any dominated brains in the pred + if(pb.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + pb << sound(pick(voice_sounds_list), volume = 25) f = TRUE for(var/B in pb.vore_organs) for(var/mob/living/L in B) if(L.absorbed && L != M && L.ckey) to_chat(L, "\The [M] [message]") //To any absorbed people in the pred + if(L.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + L << sound(pick(voice_sounds_list), volume = 25) f = TRUE //Let's also check and see if there's anyone inside of us to send the message to. @@ -250,18 +289,30 @@ if(istype(I, /mob/living/dominated_brain)) var/mob/living/dominated_brain/db = I to_chat(db, "\The [M] [message]") //To any dominated brains inside us + if(db.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + db << sound(pick(voice_sounds_list), volume = 25) f = TRUE for(var/B in M.vore_organs) for(var/mob/living/L in B) if(L.absorbed) to_chat(L, "\The [M] [message]") //To any absorbed people inside us + if(L.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + L << sound(pick(voice_sounds_list), volume = 25) f = TRUE if(f) //We found someone to send the message to if(pb) to_chat(M, "\The [M] [message]") //To us if we are the prey + if(M.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + M << sound(pick(voice_sounds_list), volume = 25) else to_chat(M, "\The [M] [message]") //To us if we are the pred + if(M.is_preference_enabled(/datum/client_preference/say_sounds)) + if(voice_sounds_list) //CHOMPEdit, changes subtle emote sound to use mob voice instead + M << sound(pick(voice_sounds_list), volume = 25) for (var/mob/G in player_list) if (istype(G, /mob/new_player)) continue diff --git a/code/modules/modular_computers/NTNet/NTNet.dm b/code/modules/modular_computers/NTNet/NTNet.dm index 6479f92a21..f725cf5aa7 100644 --- a/code/modules/modular_computers/NTNet/NTNet.dm +++ b/code/modules/modular_computers/NTNet/NTNet.dm @@ -10,21 +10,30 @@ var/global/datum/ntnet/ntnet_global = new() var/list/available_news = list() var/list/chat_channels = list() var/list/fileservers = list() - var/list/email_accounts = list() // I guess we won't have more than 999 email accounts active at once in single round, so this will do until Servers are implemented someday. + /// Holds all the email accounts that exists. Hopefully won't exceed 999 + var/list/email_accounts = list() var/list/banned_nids = list() - // Amount of logs the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly. - // High values make displaying logs much laggier. + /// A list of nid - os datum pairs. An OS in this list is not necessarily connected to NTNet or visible on it. + var/list/registered_nids = list() + /// Amount of log entries the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly. High values make displaying logs much laggier. var/setting_maxlogcount = 100 - // These only affect wireless. LAN (consoles) are unaffected since it would be possible to create scenario where someone turns off NTNet, and is unable to turn it back on since it refuses connections - var/setting_softwaredownload = 1 - var/setting_peertopeer = 1 - var/setting_communication = 1 - var/setting_systemcontrol = 1 - var/setting_disabled = 0 // Setting to 1 will disable all wireless, independently on relays status. + /// Programs requiring NTNET_SOFTWAREDOWNLOAD won't work if this is set to FALSE and public-facing device they are connecting with is wireless. + var/setting_softwaredownload = TRUE + /// Programs requiring NTNET_PEERTOPEER won't work if this is set to FALSE and public-facing device they are connecting with is wireless. + var/setting_peertopeer = TRUE + /// Programs requiring NTNET_COMMUNICATION won't work if this is set to FALSE and public-facing device they are connecting with is wireless. + var/setting_communication = TRUE + /// Programs requiring NTNET_SYSTEMCONTROL won't work if this is set to FALSE and public-facing device they are connecting with is wireless. + var/setting_systemcontrol = TRUE - var/intrusion_detection_enabled = 1 // Whether the IDS warning system is enabled - var/intrusion_detection_alarm = 0 // Set when there is an IDS warning due to malicious (antag) software. + /// Setting to TRUE will disable all wireless connections, independently off relays status. + var/setting_disabled = FALSE + + /// Whether the IDS warning system is enabled + var/intrusion_detection_enabled = TRUE + /// Set when there is an IDS warning due to malicious (antag) software. + var/intrusion_detection_alarm = FALSE // If new NTNet datum is spawned, it replaces the old one. @@ -62,7 +71,13 @@ var/global/datum/ntnet/ntnet_global = new() else break -/datum/ntnet/proc/check_banned(var/NID) +/datum/ntnet/proc/get_os_by_nid(NID) + return registered_nids["[NID]"] + +/datum/ntnet/proc/unregister(NID) + registered_nids -= "[NID]" + +/datum/ntnet/proc/check_banned(NID) if(!relays || !relays.len) return FALSE @@ -138,10 +153,12 @@ var/global/datum/ntnet/ntnet_global = new() // Resets the IDS alarm /datum/ntnet/proc/resetIDS() intrusion_detection_alarm = 0 + add_log("-!- INTRUSION DETECTION ALARM RESET BY SYSTEM OPERATOR -!-") /datum/ntnet/proc/toggleIDS() resetIDS() intrusion_detection_enabled = !intrusion_detection_enabled + add_log("Configuration Updated. Intrusion Detection [intrusion_detection_enabled ? "enabled" : "disabled"].") // Removes all logs /datum/ntnet/proc/purge_logs() @@ -185,4 +202,3 @@ var/global/datum/ntnet/ntnet_global = new() for(var/datum/ntnet_conversation/chan in chat_channels) if(chan.id == id) return chan - diff --git a/code/modules/modular_computers/NTNet/emails/email_account.dm b/code/modules/modular_computers/NTNet/emails/email_account.dm index b5f9388714..7cccdeb6bc 100644 --- a/code/modules/modular_computers/NTNet/emails/email_account.dm +++ b/code/modules/modular_computers/NTNet/emails/email_account.dm @@ -1,12 +1,22 @@ /datum/computer_file/data/email_account/ var/list/inbox = list() + var/list/outbox = list() var/list/spam = list() var/list/deleted = list() var/login = "" var/password = "" - var/can_login = TRUE // Whether you can log in with this account. Set to false for system accounts - var/suspended = FALSE // Whether the account is banned by the SA. + /// Whether you can log in with this account. Set to FALSE for system accounts. + var/can_login = TRUE + /// Whether the account is banned by the SA. + var/suspended = FALSE + var/connected_clients = list() + + var/fullname = "N/A" + var/assignment = "N/A" + + var/notification_mute = FALSE + var/notification_sound = "*beep*" /datum/computer_file/data/email_account/calculate_size() size = 1 @@ -64,7 +74,28 @@ can_login = FALSE /datum/computer_file/data/email_account/service/broadcaster/ - login = "broadcast@internal-services.nt" + login = EMAIL_BROADCAST + +/datum/computer_file/data/email_account/service/broadcaster/receive_mail(var/datum/computer_file/data/email_message/received_message, var/relayed) + if(suspended || !istype(received_message) || relayed) + return FALSE + // Possibly exploitable for user spamming so keep admins informed. + if(!received_message.spam) + log_and_message_admins("Broadcast email address used by [usr]. Message title: [received_message.title].") + + spawn(0) + for(var/datum/computer_file/data/email_account/email_account in ntnet_global.email_accounts) + var/datum/computer_file/data/email_message/new_message = received_message.clone() + send_mail(email_account.login, new_message, 1) + sleep(2) + + return TRUE + +/datum/computer_file/data/email_account/service/document + login = EMAIL_DOCUMENTS + +/datum/computer_file/data/email_account/service/sysadmin + login = EMAIL_SYSADMIN /datum/computer_file/data/email_account/service/broadcaster/receive_mail(var/datum/computer_file/data/email_message/received_message, var/relayed) if(!istype(received_message) || relayed) @@ -79,4 +110,4 @@ send_mail(email_account.login, new_message, 1) sleep(2) - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/modular_computers/computers/modular_computer/variables.dm b/code/modules/modular_computers/computers/modular_computer/variables.dm index 59c45f993a..101e7056f9 100644 --- a/code/modules/modular_computers/computers/modular_computer/variables.dm +++ b/code/modules/modular_computers/computers/modular_computer/variables.dm @@ -53,4 +53,12 @@ var/obj/item/weapon/computer_hardware/nano_printer/nano_printer // Nano Printer component of this computer, for your everyday paperwork needs. var/obj/item/weapon/computer_hardware/hard_drive/portable/portable_drive // Portable data storage var/obj/item/weapon/computer_hardware/ai_slot/ai_slot // AI slot, an intellicard housing that allows modifications of AIs. - var/obj/item/weapon/computer_hardware/tesla_link/tesla_link // Tesla Link, Allows remote charging from nearest APC. \ No newline at end of file + var/obj/item/weapon/computer_hardware/tesla_link/tesla_link // Tesla Link, Allows remote charging from nearest APC. + + var/modifiable = TRUE // can't be modified or damaged if false + + var/stores_pen = FALSE + var/obj/item/weapon/pen/stored_pen + + var/interact_sounds + var/interact_sound_volume = 40 diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index bb41552432..b477862535 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -1,18 +1,35 @@ var/global/file_uid = 0 /datum/computer_file/ - var/filename = "NewFile" // Placeholder. No spacebars - var/filetype = "XXX" // File full names are [filename].[filetype] so like NewFile.XXX in this case - var/size = 1 // File size in GQ. Integers only! - var/obj/item/weapon/computer_hardware/hard_drive/holder // Holder that contains this file. - var/unsendable = 0 // Whether the file may be sent to someone via NTNet transfer or other means. - var/undeletable = 0 // Whether the file may be deleted. Setting to 1 prevents deletion/renaming/etc. - var/uid // UID of this file + /// Placeholder. Whitespace and most special characters are not allowed. + var/filename = "NewFile" + /// File full names are [filename].[filetype] so like NewFile.XXX in this case + var/filetype = "XXX" + /// File size in GQ. Integers only! + var/size = 1 + /// Holder that contains this file. + var/obj/item/weapon/computer_hardware/hard_drive/holder + //// Whether the file may be sent to someone via NTNet transfer, email or other means. + var/unsendable = FALSE + /// Whether the file may be deleted. Setting to TRUE prevents deletion/renaming/etc. + var/undeletable = FALSE + /// Whether the file is hidden from view in the OS + var/hidden = FALSE + /// Protects files that should never be edited by the user due to special properties. + var/read_only = FALSE + /// UID of this file + var/uid + /// Any metadata the file uses. + var/list/metadata + /// Paper type to use for printing + var/papertype = /obj/item/weapon/paper -/datum/computer_file/New() +/datum/computer_file/New(list/md = null) ..() uid = file_uid file_uid++ + if(islist(md)) + metadata = md.Copy() /datum/computer_file/Destroy() if(!holder) @@ -30,10 +47,13 @@ var/global/file_uid = 0 var/datum/computer_file/temp = new type temp.unsendable = unsendable temp.undeletable = undeletable + temp.hidden = hidden temp.size = size + if(metadata) + temp.metadata = metadata.Copy() if(rename) temp.filename = filename + "(Copy)" else temp.filename = filename temp.filetype = filetype - return temp \ No newline at end of file + return temp diff --git a/code/modules/modular_computers/file_system/data.dm b/code/modules/modular_computers/file_system/data.dm index 7ad48bea54..c58ad7ac2b 100644 --- a/code/modules/modular_computers/file_system/data.dm +++ b/code/modules/modular_computers/file_system/data.dm @@ -1,10 +1,11 @@ // /data/ files store data in string format. // They don't contain other logic for now. /datum/computer_file/data - var/stored_data = "" // Stored data in string format. filetype = "DAT" + + var/stored_data = "" // Stored data in string format. var/block_size = 250 - var/do_not_edit = 0 // Whether the user will be reminded that the file probably shouldn't be edited. + var/do_not_edit = FALSE // Whether the user will be reminded that the file probably shouldn't be edited. /datum/computer_file/data/clone() var/datum/computer_file/data/temp = ..() @@ -15,5 +16,43 @@ /datum/computer_file/data/proc/calculate_size() size = max(1, round(length(stored_data) / block_size)) +/datum/computer_file/data/proc/generate_file_data(mob/user) + return digitalPencode2html(stored_data) + /datum/computer_file/data/logfile filetype = "LOG" + +/datum/computer_file/data/text + filetype = "TXT" + +/// Mapping tool - creates a named modular computer file in a computer's storage on late initialize. +/// Use this to do things like automatic records and blackboxes. Alternative for paper records. +/// Values can be in the editor for each map or as a subtype. +/// This is an obj because raw atoms can't be placed in DM or third-party mapping tools. +///obj/effect/computer_file_creator +// name = "computer file creator" +// desc = "This is a mapping tool used for installing text files onto a modular device when it's mapped on top of them. If you see it, it's bugged." +// icon = 'icons/effects/landmarks.dmi' +// icon_state = "x3" +// anchored = TRUE +// unacidable = TRUE +// simulated = FALSE +// invisibility = 101 +// /// The name that the file will have once it's created. +// var/file_name = "helloworld" +// /// The contents of this file. Uses paper formatting. +// var/file_info = "Hello World!" + +///obj/effect/computer_file_creator/Initialize() +// . = ..() +// return INITIALIZE_HINT_LATELOAD + +///obj/effect/computer_file_creator/LateInitialize() +// var/turf/T = get_turf(src) +// for (var/obj/O in T) +// if (!istype(O, /obj/machinery/computer/modular) && !istype(O, /obj/item/modular_computer)) +// continue +// var/datum/extension/interactive/ntos/os = get_extension(O, /datum/extension/interactive/ntos) +// if (os) +// os.create_data_file(file_name, file_info, /datum/computer_file/data/text) +// qdel(src) diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index d5e55940d0..905a6434be 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -1,30 +1,39 @@ // /program/ files are executable programs that do things. /datum/computer_file/program - filetype = "PRG" filename = "UnknownProgram" // File name. FILE NAME MUST BE UNIQUE IF YOU WANT THE PROGRAM TO BE DOWNLOADABLE FROM NTNET! + filetype = "PRG" + var/required_access = null // List of required accesses to run/download the program. var/requires_access_to_run = 1 // Whether the program checks for required_access when run. var/requires_access_to_download = 1 // Whether the program checks for required_access when downloading. + // TGUIModule var/datum/tgui_module/TM = null // If the program uses TGUIModule, put it here and it will be automagically opened. Otherwise implement tgui_interact. var/tguimodule_path = null // Path to tguimodule, make sure to set this if implementing new program. - // Etc Program stuff var/program_state = PROGRAM_STATE_KILLED// PROGRAM_STATE_KILLED or PROGRAM_STATE_BACKGROUND or PROGRAM_STATE_ACTIVE - specifies whether this program is running. var/obj/item/modular_computer/computer // Device that runs this program. + var/filedesc = "Unknown Program" // User-friendly name of this program. var/extended_desc = "N/A" // Short description of this program's function. + /// Category that this program belongs to. + var/category = PROG_MISC + var/usage_flags = PROGRAM_ALL // Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) or PROGRAM_ALL + var/program_icon_state = null // Program-specific screen icon state var/program_key_state = "standby_key" // Program-specific keyboard icon state var/program_menu_icon = "newwin" // Icon to use for program's link in main menu + var/ui_header = null // Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images are taken from /nano/images/status_icons. Be careful not to use too large images! + var/requires_ntnet = 0 // Set to 1 for program to require nonstop NTNet connection to run. If NTNet connection is lost program crashes. var/requires_ntnet_feature = 0 // Optional, if above is set to 1 checks for specific function of NTNet (currently NTNET_SOFTWAREDOWNLOAD, NTNET_PEERTOPEER, NTNET_SYSTEMCONTROL and NTNET_COMMUNICATION) - var/ntnet_status = 1 // NTNet status, updated every tick by computer running this program. Don't use this for checks if NTNet works, computers do that. Use this for calculations, etc. - var/usage_flags = PROGRAM_ALL // Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) or PROGRAM_ALL var/network_destination = null // Optional string that describes what NTNet server/system this program connects to. Used in default logging. + + var/ntnet_status = 1 // NTNet status, updated every tick by computer running this program. Don't use this for checks if NTNet works, computers do that. Use this for calculations, etc. var/available_on_ntnet = 1 // Whether the program can be downloaded from NTNet. Set to 0 to disable. var/available_on_syndinet = 0 // Whether the program can be downloaded from SyndiNet (accessible via emagging the computer). Set to 1 to enable. + + // Misc var/computer_emagged = 0 // Set to 1 if computer that's running us was emagged. Computer updates this every Process() tick - var/ui_header = null // Example: "something.gif" - a header image that will be rendered in computer's UI when this program is running at background. Images are taken from /nano/images/status_icons. Be careful not to use too large images! var/ntnet_speed = 0 // GQ/s - current network connectivity transfer rate /// Name of the tgui interface var/tgui_id @@ -230,4 +239,4 @@ /datum/computer_file/program/proc/relaymove(var/mob/M, direction) if(TM) - return TM.relaymove(M, direction) \ No newline at end of file + return TM.relaymove(M, direction) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm b/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm index 4c1b153734..3f6f4b1286 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm @@ -7,8 +7,8 @@ program_menu_icon = "zoomin" extended_desc = "This very advanced piece of software uses adaptive programming and large database of cipherkeys to bypass most encryptions used on camera networks. Be warned that system administrator may notice this." size = 73 // Very large, a price for bypassing ID checks completely. - available_on_ntnet = 0 - available_on_syndinet = 1 + available_on_ntnet = FALSE + available_on_syndinet = TRUE /datum/computer_file/program/camera_monitor/hacked/process_tick() ..() 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 47fe4ea2b3..722face19e 100644 --- a/code/modules/modular_computers/file_system/programs/command/card.dm +++ b/code/modules/modular_computers/file_system/programs/command/card.dm @@ -7,5 +7,6 @@ program_menu_icon = "key" extended_desc = "Program for programming crew ID cards." required_access = access_change_ids - requires_ntnet = 0 + requires_ntnet = FALSE size = 8 + category = PROG_COMMAND diff --git a/code/modules/modular_computers/file_system/programs/command/comm.dm b/code/modules/modular_computers/file_system/programs/command/comm.dm index 01db6036e9..61b6e97c8c 100644 --- a/code/modules/modular_computers/file_system/programs/command/comm.dm +++ b/code/modules/modular_computers/file_system/programs/command/comm.dm @@ -12,10 +12,11 @@ tguimodule_path = /datum/tgui_module/communications/ntos extended_desc = "Used to command and control. Can relay long-range communications. This program can not be run on tablet computers." required_access = access_heads - requires_ntnet = 1 + requires_ntnet = TRUE size = 12 usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP network_destination = "long-range communication array" + category = PROG_COMMAND var/datum/comm_message_listener/message_core = new /datum/computer_file/program/comm/clone() diff --git a/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm index d7f13fcbc5..8dd86e2baf 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/alarm_monitor.dm @@ -8,9 +8,10 @@ program_menu_icon = "alert" extended_desc = "This program provides visual interface for the engineering alarm system." required_access = access_engine - requires_ntnet = 1 + requires_ntnet = TRUE network_destination = "alarm monitoring network" size = 5 + category = PROG_MONITOR var/has_alert = 0 /datum/computer_file/program/alarm_monitor/process_tick() diff --git a/code/modules/modular_computers/file_system/programs/engineering/atmos_control.dm b/code/modules/modular_computers/file_system/programs/engineering/atmos_control.dm index 5c25ed8315..9fc593249f 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/atmos_control.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/atmos_control.dm @@ -7,8 +7,9 @@ program_menu_icon = "shuffle" extended_desc = "This program allows remote control of air alarms. This program can not be run on tablet computers." required_access = access_atmospherics - requires_ntnet = 1 + requires_ntnet = TRUE network_destination = "atmospheric control system" requires_ntnet_feature = NTNET_SYSTEMCONTROL usage_flags = PROGRAM_LAPTOP | PROGRAM_CONSOLE + category = PROG_ENG size = 17 diff --git a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm index 5df437790b..7c3de1ef10 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/power_monitor.dm @@ -8,9 +8,10 @@ extended_desc = "This program connects to sensors to provide information about electrical systems" ui_header = "power_norm.gif" required_access = access_engine - requires_ntnet = 1 + requires_ntnet = TRUE network_destination = "power monitoring system" size = 9 + category = PROG_ENG var/has_alert = 0 /datum/computer_file/program/power_monitor/process_tick() diff --git a/code/modules/modular_computers/file_system/programs/engineering/rcon_console.dm b/code/modules/modular_computers/file_system/programs/engineering/rcon_console.dm index ded2e3922f..1ff068b90a 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/rcon_console.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/rcon_console.dm @@ -7,8 +7,9 @@ program_menu_icon = "power" extended_desc = "This program allows remote control of power distribution systems. This program can not be run on tablet computers." required_access = access_engine - requires_ntnet = 1 + requires_ntnet = TRUE network_destination = "RCON remote control system" requires_ntnet_feature = NTNET_SYSTEMCONTROL usage_flags = PROGRAM_LAPTOP | PROGRAM_CONSOLE size = 19 + category = PROG_ENG diff --git a/code/modules/modular_computers/file_system/programs/engineering/shutoff_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/shutoff_monitor.dm index e87991041e..70027b69e6 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/shutoff_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/shutoff_monitor.dm @@ -7,7 +7,8 @@ program_menu_icon = "wrench" extended_desc = "This program allows for remote monitoring and control of emergency shutoff valves." required_access = access_engine - requires_ntnet = 1 + requires_ntnet = TRUE network_destination = "shutoff valve control computer" size = 5 + category = PROG_ENG var/has_alert = 0 diff --git a/code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm b/code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm index 9c3cabd3f7..eafa7308fa 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/supermatter_monitor.dm @@ -8,9 +8,10 @@ extended_desc = "This program connects to specially calibrated supermatter sensors to provide information on the status of supermatter-based engines." ui_header = "smmon_0.gif" required_access = access_engine - requires_ntnet = 1 + requires_ntnet = TRUE network_destination = "supermatter monitoring system" size = 5 + category = PROG_ENG var/last_status = 0 /datum/computer_file/program/supermatter_monitor/process_tick() diff --git a/code/modules/modular_computers/file_system/programs/generic/camera.dm b/code/modules/modular_computers/file_system/programs/generic/camera.dm index 41551e0cb0..d7ed210e78 100644 --- a/code/modules/modular_computers/file_system/programs/generic/camera.dm +++ b/code/modules/modular_computers/file_system/programs/generic/camera.dm @@ -40,6 +40,7 @@ size = 12 available_on_ntnet = 1 requires_ntnet = 1 + category = PROG_MONITOR // ERT Variant of the program /datum/computer_file/program/camera_monitor/ert diff --git a/code/modules/modular_computers/file_system/programs/generic/configurator.dm b/code/modules/modular_computers/file_system/programs/generic/configurator.dm index 2d660c8b7e..66c1a25464 100644 --- a/code/modules/modular_computers/file_system/programs/generic/configurator.dm +++ b/code/modules/modular_computers/file_system/programs/generic/configurator.dm @@ -12,6 +12,8 @@ unsendable = 1 undeletable = 1 size = 4 - available_on_ntnet = 0 - requires_ntnet = 0 + available_on_ntnet = FALSE + requires_ntnet = FALSE tguimodule_path = /datum/tgui_module/computer_configurator + usage_flags = PROGRAM_ALL + category = PROG_UTIL diff --git a/code/modules/modular_computers/file_system/programs/generic/email_client.dm b/code/modules/modular_computers/file_system/programs/generic/email_client.dm index 32d635fef4..cea1f070ce 100644 --- a/code/modules/modular_computers/file_system/programs/generic/email_client.dm +++ b/code/modules/modular_computers/file_system/programs/generic/email_client.dm @@ -6,10 +6,12 @@ program_key_state = "generic_key" program_menu_icon = "mail-closed" size = 7 - requires_ntnet = 1 - available_on_ntnet = 1 + requires_ntnet = TRUE + available_on_ntnet = TRUE var/stored_login = "" var/stored_password = "" + usage_flags = PROGRAM_ALL + category = PROG_OFFICE tguimodule_path = /datum/tgui_module/email_client diff --git a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm index 17fd005f9a..30719cf0be 100644 --- a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm @@ -13,6 +13,8 @@ var/open_file var/error + usage_flags = PROGRAM_ALL + category = PROG_UTIL /datum/computer_file/program/filemanager/tgui_act(action, list/params, datum/tgui/ui) if(..()) @@ -63,7 +65,7 @@ var/oldtext = html_decode(F.stored_data) oldtext = replacetext(oldtext, "\[br\]", "\n") - var/newtext = sanitize(replacetext(tgui_input_text(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", oldtext, MAX_TEXTFILE_LENGTH, TRUE), "\n", "\[br\]"), MAX_TEXTFILE_LENGTH) + var/newtext = sanitize(replacetext(tgui_input_text(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", oldtext, MAX_TEXTFILE_LENGTH, TRUE, prevent_enter = TRUE), "\n", "\[br\]"), MAX_TEXTFILE_LENGTH) if(!newtext) return @@ -151,7 +153,7 @@ data["error"] = error if(!computer || !HDD) data["error"] = "I/O ERROR: Unable to access hard drive." - + data["filedata"] = null data["filename"] = null data["files"] = list() diff --git a/code/modules/modular_computers/file_system/programs/generic/game.dm b/code/modules/modular_computers/file_system/programs/generic/game.dm index 31eaac08d2..8d3219bc42 100644 --- a/code/modules/modular_computers/file_system/programs/generic/game.dm +++ b/code/modules/modular_computers/file_system/programs/generic/game.dm @@ -26,6 +26,8 @@ ///Determines which boss image to use on the UI. var/boss_id = 1 + usage_flags = PROGRAM_ALL + // This is the primary game loop, which handles the logic of being defeated or winning. /datum/computer_file/program/game/proc/game_check(mob/user) sleep(5) diff --git a/code/modules/modular_computers/file_system/programs/generic/news_browser.dm b/code/modules/modular_computers/file_system/programs/generic/news_browser.dm index 20fdd42f81..6eb6fc0f2e 100644 --- a/code/modules/modular_computers/file_system/programs/generic/news_browser.dm +++ b/code/modules/modular_computers/file_system/programs/generic/news_browser.dm @@ -8,7 +8,7 @@ size = 4 requires_ntnet = TRUE available_on_ntnet = TRUE - + usage_flags = PROGRAM_ALL tgui_id = "NtosNewsBrowser" var/datum/computer_file/data/news_article/loaded_article @@ -118,4 +118,3 @@ if("PRG_toggle_archived") . = TRUE show_archived = !show_archived - diff --git a/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm index 14e2343e66..fd8884cac8 100644 --- a/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/generic/ntdownloader.dm @@ -16,12 +16,19 @@ var/datum/computer_file/program/downloaded_file = null var/hacked_download = 0 - var/download_completion = 0 //GQ of downloaded data. + ///GQ of downloaded data. + var/download_completion = 0 var/download_netspeed = 0 var/downloaderror = "" - var/obj/item/modular_computer/my_computer = null var/list/downloads_queue[0] + var/file_info + var/server + usage_flags = PROGRAM_ALL + category = PROG_UTIL + + var/obj/item/modular_computer/my_computer = null + /datum/computer_file/program/ntnetdownload/kill_program() ..() abort_file_download() diff --git a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm index a9a1e3456d..ab26ed4862 100644 --- a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm @@ -12,12 +12,16 @@ ui_header = "ntnrc_idle.gif" available_on_ntnet = 1 tgui_id = "NtosNetChat" - var/last_message // Used to generate the toolbar icon + /// Used to generate the toolbar icon + var/last_message var/username var/active_channel var/list/channel_history = list() - var/operator_mode = FALSE // Channel operator mode - var/netadmin_mode = FALSE // Administrator mode (invisible to other users + bypasses passwords) + /// Channel operator mode + var/operator_mode = FALSE + /// Administrator mode (invisible to other users + bypasses passwords) + var/netadmin_mode = FALSE + usage_flags = PROGRAM_ALL /datum/computer_file/program/chatclient/New() username = "DefaultUser[rand(100, 999)]" @@ -169,7 +173,7 @@ var/list/data = list() data["can_admin"] = can_run(user, FALSE, access_network) return data - + /datum/computer_file/program/chatclient/tgui_data(mob/user) if(!ntnet_global || !ntnet_global.chat_channels) return list() @@ -223,4 +227,4 @@ data["authed"] = FALSE data["messages"] = list() - return data \ No newline at end of file + return data diff --git a/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm b/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm index 8471288b09..1c73f44baa 100644 --- a/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm +++ b/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm @@ -8,11 +8,12 @@ var/global/nttransfer_uid = 0 program_key_state = "generic_key" program_menu_icon = "transferthick-e-w" size = 7 - requires_ntnet = 1 + requires_ntnet = TRUE requires_ntnet_feature = NTNET_PEERTOPEER network_destination = "other device via P2P tunnel" - available_on_ntnet = 1 + available_on_ntnet = TRUE tgui_id = "NtosNetTransfer" + category = PROG_UTIL var/error = "" // Error screen var/server_password = "" // Optional password to download the file. @@ -23,7 +24,7 @@ var/global/nttransfer_uid = 0 var/download_completion = 0 // Download progress in GQ var/actual_netspeed = 0 // Displayed in the UI, this is the actual transfer speed. var/unique_token // UID of this program - var/upload_menu = 0 // Whether we show the program list and upload menu + var/upload_menu = FALSE // Whether we show the program list and upload menu /datum/computer_file/program/nttransfer/New() unique_token = nttransfer_uid @@ -86,14 +87,14 @@ var/global/nttransfer_uid = 0 data["download_progress"] = download_completion data["download_netspeed"] = actual_netspeed data["download_name"] = "[downloaded_file.filename].[downloaded_file.filetype]" - + data["uploading"] = !!provided_file if(provided_file) data["upload_uid"] = unique_token data["upload_clients"] = connected_clients.len data["upload_haspassword"] = server_password ? 1 : 0 data["upload_filename"] = "[provided_file.filename].[provided_file.filetype]" - + data["upload_filelist"] = list() if(upload_menu) var/list/all_files = list() @@ -104,7 +105,7 @@ var/global/nttransfer_uid = 0 "size" = F.size ))) data["upload_filelist"] = all_files - + data["servers"] = list() if(!(downloaded_file || provided_file || upload_menu)) var/list/all_servers = list() diff --git a/code/modules/modular_computers/file_system/programs/generic/wordprocessor.dm b/code/modules/modular_computers/file_system/programs/generic/wordprocessor.dm index 1acc0e7157..599f79fe78 100644 --- a/code/modules/modular_computers/file_system/programs/generic/wordprocessor.dm +++ b/code/modules/modular_computers/file_system/programs/generic/wordprocessor.dm @@ -9,12 +9,15 @@ available_on_ntnet = TRUE tgui_id = "NtosWordProcessor" - var/browsing + var/browsing = FALSE var/open_file var/loaded_data var/error var/is_edited + usage_flags = PROGRAM_ALL + category = PROG_OFFICE + /datum/computer_file/program/wordprocessor/proc/get_file(var/filename) var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive if(!HDD) @@ -166,7 +169,7 @@ var/oldtext = html_decode(loaded_data) oldtext = replacetext(oldtext, "\[br\]", "\n") - var/newtext = sanitize(replacetext(tgui_input_text(usr, "Editing file '[open_file]'. You may use most tags used in paper formatting:", "Text Editor", oldtext, MAX_TEXTFILE_LENGTH, TRUE), "\n", "\[br\]"), MAX_TEXTFILE_LENGTH) + var/newtext = sanitize(replacetext(tgui_input_text(usr, "Editing file '[open_file]'. You may use most tags used in paper formatting:", "Text Editor", oldtext, MAX_TEXTFILE_LENGTH, TRUE, prevent_enter = TRUE), "\n", "\[br\]"), MAX_TEXTFILE_LENGTH) if(!newtext) return loaded_data = newtext @@ -229,4 +232,4 @@ data["filedata"] = pencode2html(loaded_data) data["filename"] = "UNNAMED" - return data \ No newline at end of file + return data diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm index 9b94707eb2..f536770859 100644 --- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm +++ b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm @@ -7,6 +7,7 @@ program_menu_icon = "heart" extended_desc = "This program connects to life signs monitoring system to provide basic information on crew health." required_access = access_medical - requires_ntnet = 1 + requires_ntnet = TRUE network_destination = "crew lifesigns monitoring system" size = 11 + category = PROG_MONITOR diff --git a/code/modules/modular_computers/file_system/programs/research/email_administration.dm b/code/modules/modular_computers/file_system/programs/research/email_administration.dm index 8b5eddc699..fbcaf7df1b 100644 --- a/code/modules/modular_computers/file_system/programs/research/email_administration.dm +++ b/code/modules/modular_computers/file_system/programs/research/email_administration.dm @@ -6,10 +6,11 @@ program_key_state = "generic_key" program_menu_icon = "mail-open" size = 12 - requires_ntnet = 1 - available_on_ntnet = 1 + requires_ntnet = TRUE + available_on_ntnet = TRUE tgui_id = "NtosEmailAdministration" required_access = access_network + category = PROG_ADMIN var/datum/computer_file/data/email_account/current_account = null var/datum/computer_file/data/email_message/current_message = null diff --git a/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm index 8814e2a16b..c74d927b9f 100644 --- a/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm +++ b/code/modules/modular_computers/file_system/programs/research/ntmonitor.dm @@ -10,6 +10,7 @@ required_access = access_network available_on_ntnet = TRUE tgui_id = "NtosNetMonitor" + category = PROG_ADMIN /datum/computer_file/program/ntnetmonitor/tgui_data(mob/user) if(!ntnet_global) @@ -90,4 +91,4 @@ var/nid = tgui_input_number(usr,"Enter NID of device which you want to unblock from the network:", "Enter NID") if(nid && tgui_status(usr, state) == STATUS_INTERACTIVE) ntnet_global.banned_nids -= nid - return TRUE + return TRUE diff --git a/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm b/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm index a9ba1d90c0..eea7f5e306 100644 --- a/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm +++ b/code/modules/modular_computers/file_system/programs/security/digitalwarrant.dm @@ -17,11 +17,12 @@ var/warrant_uid = 0 program_icon_state = "warrant" program_key_state = "security_key" program_menu_icon = "star" - requires_ntnet = 1 - available_on_ntnet = 1 + requires_ntnet = TRUE + available_on_ntnet = TRUE required_access = access_security usage_flags = PROGRAM_ALL tgui_id = "NtosDigitalWarrant" + category = PROG_SEC var/datum/data/record/warrant/activewarrant diff --git a/code/modules/modular_computers/file_system/programs/ships/navigation.dm b/code/modules/modular_computers/file_system/programs/ships/navigation.dm index b8fecd9657..b01811210d 100644 --- a/code/modules/modular_computers/file_system/programs/ships/navigation.dm +++ b/code/modules/modular_computers/file_system/programs/ships/navigation.dm @@ -7,6 +7,6 @@ program_menu_icon = "pin-s" extended_desc = "Displays a ship's location in the sector." required_access = null - requires_ntnet = 1 + requires_ntnet = TRUE network_destination = "ship position sensors" size = 4 diff --git a/code/modules/modular_computers/hardware/_hardware.dm b/code/modules/modular_computers/hardware/_hardware.dm index e82ab5b634..10a97887e0 100644 --- a/code/modules/modular_computers/hardware/_hardware.dm +++ b/code/modules/modular_computers/hardware/_hardware.dm @@ -3,33 +3,46 @@ desc = "Unknown Hardware." icon = 'icons/obj/modular_components.dmi' var/obj/item/modular_computer/holder2 = null - var/power_usage = 0 // If the hardware uses extra power, change this. - var/enabled = 1 // If the hardware is turned off set this to 0. - var/critical = 1 // Prevent disabling for important component, like the HDD. - var/hardware_size = 1 // Limits which devices can contain this component. 1: Tablets/Laptops/Consoles, 2: Laptops/Consoles, 3: Consoles only - var/damage = 0 // Current damage level - var/max_damage = 100 // Maximal damage level. - var/damage_malfunction = 20 // "Malfunction" threshold. When damage exceeds this value the hardware piece will semi-randomly fail and do !!FUN!! things - var/damage_failure = 50 // "Failure" threshold. When damage exceeds this value the hardware piece will not work at all. - var/malfunction_probability = 10// Chance of malfunction when the component is damaged -/obj/item/weapon/computer_hardware/attackby(var/obj/item/W as obj, var/mob/living/user as mob) + /// If the hardware uses extra power, change this. + var/power_usage = 0 + /// If the hardware is turned off set this to FALSE. + var/enabled = TRUE + /// Prevent disabling for important component, like the HDD. + var/critical = 1 + /// Limits which devices can contain this component. 1: All, 2: Laptops/Consoles, 3: Consoles only + var/hardware_size = 1 + /// Current damage level + var/damage = 0 + /// Maximal damage level. + var/max_damage = 100 + /// "Malfunction" threshold. When damage exceeds this value the hardware piece will semi-randomly fail and do !!FUN!! things + var/damage_malfunction = 20 + /// "Failure" threshold. When damage exceeds this value the hardware piece will not work at all. + var/damage_failure = 50 + /// Chance of malfunction when the component is damaged + var/malfunction_probability = 10 + var/usage_flags = PROGRAM_ALL + /// Whether attackby will be passed on it even with a closed panel + var/external_slot + +/obj/item/weapon/computer_hardware/attackby(obj/item/W as obj, mob/living/user as mob) // Multitool. Runs diagnostics if(istype(W, /obj/item/device/multitool)) to_chat(user, "***** DIAGNOSTICS REPORT *****") diagnostics(user) to_chat(user, "******************************") - return 1 + return TRUE // Nanopaste. Repair all damage if present for a single unit. var/obj/item/stack/S = W if(istype(S, /obj/item/stack/nanopaste)) if(!damage) to_chat(user, "\The [src] doesn't seem to require repairs.") - return 1 + return TRUE if(S.use(1)) to_chat(user, "You apply a bit of \the [W] to \the [src]. It immediately repairs all damage.") damage = 0 - return 1 + return TRUE // Cable coil. Works as repair method, but will probably require multiple applications and more cable. if(istype(S, /obj/item/stack/cable_coil)) if(!damage) @@ -38,11 +51,11 @@ if(S.use(1)) to_chat(user, "You patch up \the [src] with a bit of \the [W].") take_damage(-10) - return 1 + return TRUE return ..() -// Called on multitool click, prints diagnostic information to the user. +/// Returns a list of lines containing diagnostic information for display. /obj/item/weapon/computer_hardware/proc/diagnostics(var/mob/user) to_chat(user, "Hardware Integrity Test... (Corruption: [damage]/[max_damage]) [damage > damage_failure ? "FAIL" : damage > damage_malfunction ? "WARN" : "PASS"]") @@ -57,20 +70,20 @@ holder2 = null return ..() -// Handles damage checks +/// Handles damage checks /obj/item/weapon/computer_hardware/proc/check_functionality() // Turned off if(!enabled) - return 0 + return FALSE // Too damaged to work at all. if(damage > damage_failure) - return 0 + return FALSE // Still working. Well, sometimes... if(damage > damage_malfunction) if(prob(malfunction_probability)) - return 0 + return FALSE // Good to go. - return 1 + return TRUE /obj/item/weapon/computer_hardware/examine(var/mob/user) . = ..() @@ -81,8 +94,7 @@ else if(damage) . += "It seems to be slightly damaged." -// Damages the component. Contains necessary checks. Negative damage "heals" the component. +/// Damages the component. Contains necessary checks. Negative damage "heals" the component. /obj/item/weapon/computer_hardware/take_damage(var/amount) damage += round(amount) // We want nice rounded numbers here. damage = between(0, damage, max_damage) // Clamp the value. - diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm index c9aa58d8d1..e365ff16e6 100644 --- a/code/modules/modular_computers/hardware/hard_drive.dm +++ b/code/modules/modular_computers/hardware/hard_drive.dm @@ -5,9 +5,13 @@ icon_state = "hdd_normal" hardware_size = 1 origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) + var/max_capacity = 128 var/used_capacity = 0 - var/list/stored_files = list() // List of stored files on this drive. DO NOT MODIFY DIRECTLY! + /// List of stored files on this drive. DO NOT MODIFY DIRECTLY! + var/list/stored_files = list() + /// Whether drive is protected against changes + var/read_only = FALSE /obj/item/weapon/computer_hardware/hard_drive/advanced name = "advanced hard drive" @@ -60,6 +64,7 @@ // 999 is a byond limit that is in place. It's unlikely someone will reach that many files anyway, since you would sooner run out of space. to_chat(user, "NT-NFS File Table Status: [stored_files.len]/999") to_chat(user, "Storage capacity: [used_capacity]/[max_capacity]GQ") + to_chat(user, "Read-only mode: [(read_only ? "ON" : "OFF")]") // Use this proc to add file to the drive. Returns 1 on success and 0 on failure. Contains necessary sanity checks. /obj/item/weapon/computer_hardware/hard_drive/proc/store_file(var/datum/computer_file/F) @@ -164,4 +169,4 @@ /obj/item/weapon/computer_hardware/hard_drive/New() install_default_programs() - ..() \ No newline at end of file + ..() diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index 65014be37f..b3b37ab54f 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -8,12 +8,20 @@ var/global/ntnet_card_uid = 1 critical = 0 icon_state = "netcard_basic" hardware_size = 1 - var/identification_id = null // Identification ID. Technically MAC address of this device. Can't be changed by user. - var/identification_string = "" // Identification string, technically nickname seen in the network. Can be set by user. - var/long_range = 0 - var/ethernet = 0 // Hard-wired, therefore always on, ignores NTNet wireless checks. malfunction_probability = 1 + /// Identification ID. Technically MAC address of this device. Can't be changed by user. + var/identification_id = null + /// Identification string, technically nickname seen in the network. Can be set by user. + var/identification_string = "" + + /// Long-range cards have stronger connections, letting them reach relays from connected Z-levels. + var/long_range = 0 + /// Hard-wired, therefore always on, ignores NTNet wireless checks. + var/ethernet = 0 + /// If set, uses the value to funnel connections through another network card. + var/proxy_id + /obj/item/weapon/computer_hardware/network_card/diagnostics(var/mob/user) ..() to_chat(user, "NIX Unique ID: [identification_id]") diff --git a/code/modules/multiz/movement_vr.dm b/code/modules/multiz/movement_vr.dm index 49dd8eab97..a8dde43ee9 100644 --- a/code/modules/multiz/movement_vr.dm +++ b/code/modules/multiz/movement_vr.dm @@ -43,16 +43,16 @@ var/mob/living/prey = src var/fallloc = prey.loc - if(pred.can_be_drop_pred && prey.can_be_drop_prey && pred.drop_vore && prey.drop_vore) + if(pred.vore_selected && pred.can_be_drop_pred && prey.can_be_drop_prey && pred.drop_vore && prey.drop_vore) pred.feed_grabbed_to_self_falling_nom(pred,prey) pred.loc = fallloc if(!safe_fall) pred.Weaken(8) pred.visible_message("\The [pred] falls right onto \the [prey]!") - else if(prey.can_be_drop_pred && pred.can_be_drop_prey && pred.drop_vore && prey.drop_vore) + else if(prey.vore_selected && prey.can_be_drop_pred && pred.can_be_drop_prey && pred.drop_vore && prey.drop_vore) prey.feed_grabbed_to_self_falling_nom(prey,pred) - pred.Weaken(4) - pred.visible_message("\The [pred] falls right into \the [prey]!") + prey.Weaken(4) + prey.visible_message("\The [pred] falls right into \the [prey]!") else pred.loc = prey.loc if(!safe_fall) diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm index b3bbddfd4b..eddc1743df 100644 --- a/code/modules/multiz/turf.dm +++ b/code/modules/multiz/turf.dm @@ -53,6 +53,8 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr pathweight = 100000 //Seriously, don't try and path over this one numbnuts dynamic_lighting = 0 // Someday lets do proper lighting z-transfer. Until then we are leaving this off so it looks nicer. can_build_into_floor = TRUE + can_dirty = FALSE // It's open space + can_start_dirty = FALSE /turf/simulated/open/vacuum oxygen = 0 diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index e42439201c..8a2740782e 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -377,7 +377,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable last_notification = message // TGUI Hook - to_chat(human,"\[[bicon(src.big_icon)]NIF\] displays, \"[message]\"") + to_chat(human,"\[\icon[src.big_icon][bicon(src.big_icon)]NIF\] displays, \"[message]\"") if(prob(1)) human.visible_message("\The [human] [pick(look_messages)].") if(alert) human << bad_sound diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index f4f3135b8e..a684c696d7 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -377,3 +377,32 @@ ..() for(var/i = 0 to 7) new /obj/item/weapon/disk/nifsoft/mining(src) + +// Pilot Disk // +/obj/item/weapon/disk/nifsoft/pilot + name = "NIFSoft Uploader - Pilot" + desc = "Contains free NIFSofts useful for pilot members.\n\ + It has a small label: \n\ + \"Portable NIFSoft Installation Media. \n\ + Align ocular port with eye socket and depress red plunger.\"" + + icon_state = "pilot" + stored_organic = /datum/nifsoft/package/pilot + stored_synthetic = /datum/nifsoft/package/pilot_synth + +/datum/nifsoft/package/pilot + software = list(/datum/nifsoft/spare_breath) + +/datum/nifsoft/package/pilot_synth + software = list(/datum/nifsoft/pressure,/datum/nifsoft/heatsinks) + +/obj/item/weapon/storage/box/nifsofts_pilot + name = "pilot nifsoft uploaders" + desc = "A box of free nifsofts for pilot employees." + icon = 'icons/obj/boxes.dmi' + icon_state = "nifsoft_kit_pilot" + +/obj/item/weapon/storage/box/nifsofts_pilot/New() + ..() + for(var/i = 0 to 7) + new /obj/item/weapon/disk/nifsoft/pilot(src) \ No newline at end of file diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 21b1c20aec..04766a51e4 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -72,11 +72,11 @@ /datum/nifsoft/soulcatcher/proc/notify_into(var/message) var/sound = nif.good_sound - to_chat(nif.human,"\[[bicon(nif.big_icon)]NIF\] Soulcatcher displays, \"[message]\"") + to_chat(nif.human,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] Soulcatcher displays, \"[message]\"") nif.human << sound for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) - to_chat(CS,"\[[bicon(nif.big_icon)]NIF\] Soulcatcher displays, \"[message]\"") + to_chat(CS,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] Soulcatcher displays, \"[message]\"") CS << sound /datum/nifsoft/soulcatcher/proc/say_into(var/message, var/mob/living/sender, var/mob/eyeobj) @@ -88,9 +88,9 @@ //Not AR Projecting else - to_chat(nif.human,"\[[bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") + to_chat(nif.human,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) - to_chat(CS,"\[[bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") + to_chat(CS,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") log_nsay(message,nif.human.real_name,sender) @@ -103,9 +103,9 @@ //Not AR Projecting else - to_chat(nif.human,"\[[bicon(nif.big_icon)]NIF\] [sender_name] [message]") + to_chat(nif.human,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] [sender_name] [message]") for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) - to_chat(CS,"\[[bicon(nif.big_icon)]NIF\] [sender_name] [message]") + to_chat(CS,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] [sender_name] [message]") log_nme(message,nif.human.real_name,sender) @@ -128,7 +128,7 @@ var/new_flavor = tgui_input_text(nif.human, "Type what the prey sees after being 'caught'. This will be \ printed after an intro ending with: \"Around you, you see...\" to the prey. If you already \ have prey, this will be printed to them after \"Your surroundings change to...\". Limit 2048 char.", \ - "VR Environment", html_decode(inside_flavor), MAX_MESSAGE_LEN*2, TRUE) + "VR Environment", html_decode(inside_flavor), MAX_MESSAGE_LEN*2, TRUE, prevent_enter = TRUE) new_flavor = sanitize(new_flavor, MAX_MESSAGE_LEN*2) inside_flavor = new_flavor nif.notify("Updating VR environment...") @@ -326,7 +326,7 @@ /mob/living/carbon/brain/caught_soul/hear_say() if(ext_deaf || !client) return FALSE - ..() + .=..() /mob/living/carbon/brain/caught_soul/show_message(msg, type, alt, alt_type) if(ext_blind || !client) @@ -503,7 +503,7 @@ set name = "NMe" set desc = "Emote into your NIF's Soulcatcher." set category = "IC" - + src.nme_act(message) /mob/proc/nme_act(message as text|null) diff --git a/code/modules/nifsoft/software/14_commlink.dm b/code/modules/nifsoft/software/14_commlink.dm index 75a04fc589..47b602e184 100644 --- a/code/modules/nifsoft/software/14_commlink.dm +++ b/code/modules/nifsoft/software/14_commlink.dm @@ -81,7 +81,7 @@ var/message = combined["formatted"] var/name_used = M.GetVoice() var/rendered = null - rendered = "[bicon(icon_object)] [name_used] [message]" + rendered = "\icon[icon_object][bicon(icon_object)] [name_used] [message]" mob.show_message(rendered, 2) //Not supported by the internal one diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm index 8ec76a36d0..6e93222b2d 100644 --- a/code/modules/organs/internal/lungs.dm +++ b/code/modules/organs/internal/lungs.dm @@ -11,14 +11,26 @@ if(!owner) return - if(is_bruised()) + //VOREStation Edit Start Lungs were a surprisingly lethal cause of bloodloss. + if(is_broken()) if(prob(4)) - spawn owner?.custom_emote(VISIBLE_MESSAGE, "coughs up blood!") - owner.drip(10) - if(prob(8)) + spawn owner?.custom_emote(VISIBLE_MESSAGE, "coughs up a large amount of blood!") + var/bleeding_rng = rand(3,5) + owner.drip(bleeding_rng) + if(prob(8)) //This is a medical emergency. Will kill within minutes unless exceedingly lucky. spawn owner?.custom_emote(VISIBLE_MESSAGE, "gasps for air!") owner.AdjustLosebreath(15) + else if(is_bruised()) //Only bruised? That's an annoyance and can cause some more damage (via brainloss due to oxyloss) + if(prob(2)) //But let's not kill people too quickly. + spawn owner?.custom_emote(VISIBLE_MESSAGE, "coughs up a small amount of blood!") + var/bleeding_rng = rand(1,2) + owner.drip(bleeding_rng) + if(prob(4)) //Get to medical quickly. but shouldn't kill without exceedingly bad RNG. + spawn owner?.custom_emote(VISIBLE_MESSAGE, "gasps for air!") + owner.AdjustLosebreath(10) //Losebreath is a DoT that does 1:1 damage and prevents oxyloss healing via breathing. + //VOREStation Edit End + if(owner.internal_organs_by_name[O_BRAIN]) // As the brain starts having Trouble, the lungs start malfunctioning. var/obj/item/organ/internal/brain/Brain = owner.internal_organs_by_name[O_BRAIN] if(Brain.get_control_efficiency() <= 0.8) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 94ff5ac52e..63dc8c6666 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -379,7 +379,7 @@ droplimb(0, DROPLIMB_EDGE) else if(spread_dam && owner && parent && (brute_overflow || burn_overflow) && (brute_overflow >= 5 || burn_overflow >= 5) && !permutation) //No infinite damage loops. var/brute_third = brute_overflow * 0.33 - var/burn_third = burn_overflow * 0.33 + var/burn_third = burn_overflow * 0.33 if(children && children.len) var/brute_on_children = brute_third / children.len var/burn_on_children = burn_third / children.len @@ -595,6 +595,8 @@ This function completely restores a damaged organ to perfect condition. return 1 else last_dam = brute_dam + burn_dam + if (number_wounds != 0) + return 1 if(germ_level) return 1 return 0 @@ -731,8 +733,8 @@ Note that amputating the affected organ does in fact remove the infection from t return for(var/datum/wound/W in wounds) - // wounds can disappear after 10 minutes at the earliest - if(W.damage <= 0 && W.created + 10 * 10 * 60 <= world.time) + // wounds used to be able to disappear after 10 minutes at the earliest, for now just remove them as soon as there is no damage + if(W.damage <= 0) wounds -= W continue // let the GC handle the deletion of the wound @@ -1065,15 +1067,15 @@ Note that amputating the affected organ does in fact remove the infection from t return if(owner) - //CHOMPEdit Begin - owner.custom_pain(pick(\ - "You hear a loud cracking sound coming from \the [owner].",\ - "Something feels like it shattered in your [name]!",\ - "You hear a sickening crack."),brokenpain) - //CHOMPEdit End - jostle_bone() - if(organ_can_feel_pain() && !isbelly(owner.loc)) + if(organ_can_feel_pain() && !isbelly(owner.loc) && !isliving(owner.loc)) + //CHOMPEdit Begin + owner.custom_pain(pick(\ + "You hear a loud cracking sound coming from \the [owner].",\ + "Something feels like it shattered in your [name]!",\ + "You hear a sickening crack."),brokenpain) + //CHOMPEdit End owner.emote("scream") + jostle_bone() //VOREStation Edit End playsound(src, "fracture", 10, 1, -2) status |= ORGAN_BROKEN diff --git a/code/modules/organs/robolimbs_custom.dm b/code/modules/organs/robolimbs_custom.dm index 1df6862cf2..96d80669c1 100644 --- a/code/modules/organs/robolimbs_custom.dm +++ b/code/modules/organs/robolimbs_custom.dm @@ -174,4 +174,32 @@ VS Edit - anyone can select these. */ ..() /obj/item/weapon/disk/limb/dsi_teshari - company = "DSI - Teshari" \ No newline at end of file + company = "DSI - Teshari" + +/datum/robolimb/dsi_zorren + company = "DSI - Zorren" + desc = "This limb feels soft and fluffy, realistic design and squish. Seems a little mischievous. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSIZorren/dsi_zorren.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Zorren" + +/obj/item/weapon/disk/limb/dsi_zorren + company = "DSI - Zorren" + +/datum/robolimb/dsi_fennec + company = "DSI - Fennec" + desc = "This limb feels soft and fluffy, realistic design and squish. Seems a little mischievous. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSIFennec/dsi_fennec.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Fennec" + +/obj/item/weapon/disk/limb/dsi_fennec + company = "DSI - Fennec" diff --git a/code/modules/organs/subtypes/skrell.dm b/code/modules/organs/subtypes/skrell.dm index 3ac237c2b5..5f2d494105 100644 --- a/code/modules/organs/subtypes/skrell.dm +++ b/code/modules/organs/subtypes/skrell.dm @@ -25,7 +25,7 @@ /obj/item/organ/internal/voicebox/skrell icon_state = "skrell_larynx" - will_assist_languages = list(LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR) + will_assist_languages = list(LANGUAGE_SKRELLIAN) /obj/item/organ/internal/appendix/skrell icon_state = "skrell_appendix" diff --git a/code/modules/paperwork/faxmachine_vr.dm b/code/modules/paperwork/faxmachine_vr.dm index 74dd109368..c43fa96be2 100644 --- a/code/modules/paperwork/faxmachine_vr.dm +++ b/code/modules/paperwork/faxmachine_vr.dm @@ -1,3 +1,5 @@ +var/global/last_fax_role_request + /obj/machinery/photocopier/faxmachine req_one_access = list() @@ -94,6 +96,20 @@ world.TgsTargetedChatBroadcast("FAX: [sanitize(faxname)] / [sanitize(sent.name)] - SENT BY: [sanitize(sender.name)] - FAXID: **[sanitize(faxid)]** [contents]", TRUE) //YW EDIT END +/** + * Call the chat webhook to transmit a notification of a job request + */ +/obj/machinery/photocopier/faxmachine/proc/message_chat_rolerequest(var/font_colour="#006100", var/role_to_ping, var/reason, var/jobname) + if(config.chat_webhook_url) + spawn(0) + var/query_string = "type=rolerequest" + query_string += "&key=[url_encode(config.chat_webhook_key)]" + query_string += "&ping=[url_encode(role_to_ping)]" + query_string += "&color=[url_encode(font_colour)]" + query_string += "&reason=[url_encode(reason)]" + query_string += "&job=[url_encode(jobname)]" + world.Export("[config.chat_webhook_url]?[query_string]") + // // Overrides/additions to stock defines go here, as well as hooks. Sort them by // the object they are overriding. So all /mob/living together, etc. @@ -102,3 +118,84 @@ var/chat_webhook_url = "" // URL of the webhook for sending announcements/faxes to discord chat. var/chat_webhook_key = "" // Shared secret for authenticating to the chat webhook var/fax_export_dir = "data/faxes" // Directory in which to write exported fax HTML files. + + +/obj/machinery/photocopier/faxmachine/verb/request_roles() + set name = "Staff Request Form" + set category = "Object" + set src in oview(1) + + var/mob/living/L = usr + + if(!L || !isturf(L.loc) || !isliving(L)) + return + if(!ishuman(L) && !issilicon(L)) + return + if(L.stat || L.restrained()) + return + if(last_fax_role_request && (world.time - last_fax_role_request < 5 MINUTES)) + to_chat(L, "The global automated relays are still recalibrating. Try again later or relay your request in written form for processing.") + return + + var/confirmation = tgui_alert(L, "Are you sure you want to send automated crew request?", "Confirmation", list("Yes", "No", "Cancel")) + if(confirmation != "Yes") + return + + var/list/jobs = list() + for(var/datum/department/dept as anything in SSjob.get_all_department_datums()) + if(!dept.assignable || dept.centcom_only) + continue + for(var/job in SSjob.get_job_titles_in_department(dept.name)) + var/datum/job/J = SSjob.get_job(job) + if(J.requestable) + jobs |= job + + var/role = tgui_input_list(L, "Pick the job to request.", "Job Request", jobs) + if(!role) + return + + var/datum/job/job_to_request = SSjob.get_job(role) + var/reason = "Unspecified" + var/list/possible_reasons = list("Unspecified", "General duties", "Emergency situation") + possible_reasons += job_to_request.get_request_reasons() + reason = tgui_input_list(L, "Pick request reason.", "Request reason", possible_reasons) + + var/final_conf = tgui_alert(L, "You are about to request [role]. Are you sure?", "Confirmation", list("Yes", "No", "Cancel")) + if(final_conf != "Yes") + return + + var/datum/department/ping_dept = SSjob.get_ping_role(role) + if(!ping_dept) + to_chat(L, "Selected job cannot be requested for \[ERRORDEPTNOTFOUND] reason. Please report this to system administrator.") + return + var/message_color = "#FFFFFF" + var/ping_name = null + switch(ping_dept.name) + if(DEPARTMENT_COMMAND) + ping_name = "Command" + if(DEPARTMENT_SECURITY) + ping_name = "Security" + if(DEPARTMENT_ENGINEERING) + ping_name = "Engineering" + if(DEPARTMENT_MEDICAL) + ping_name = "Medical" + if(DEPARTMENT_RESEARCH) + ping_name = "Research" + if(DEPARTMENT_CARGO) + ping_name = "Supply" + if(DEPARTMENT_CIVILIAN) + ping_name = "Service" + if(DEPARTMENT_PLANET) + ping_name = "Expedition" + if(DEPARTMENT_SYNTHETIC) + ping_name = "Silicon" + //if(DEPARTMENT_TALON) + // ping_name = "Offmap" + if(!ping_name) + to_chat(L, "Selected job cannot be requested for \[ERRORUNKNOWNDEPT] reason. Please report this to system administrator.") + return + message_color = ping_dept.color + + message_chat_rolerequest(message_color, ping_name, reason, role) + last_fax_role_request = world.time + to_chat(L, "Your request was transmitted.") \ No newline at end of file diff --git a/code/modules/pda/app.dm b/code/modules/pda/app.dm index 93245c2a85..c86f9e507d 100644 --- a/code/modules/pda/app.dm +++ b/code/modules/pda/app.dm @@ -34,7 +34,7 @@ L = get(pda, /mob/living/silicon) if(L) - to_chat(L, "[bicon(pda)] [message]") + to_chat(L, "\icon[pda][bicon(pda)] [message]") SStgui.update_user_uis(L, pda) // Update the receiving user's PDA UI so that they can see the new message if(!notify_silent) diff --git a/code/modules/pda/messenger.dm b/code/modules/pda/messenger.dm index 6aa833fd83..73e0944a65 100644 --- a/code/modules/pda/messenger.dm +++ b/code/modules/pda/messenger.dm @@ -117,7 +117,7 @@ create_message(usr, P) if(href_list["target"] in conversations) // Need to make sure the message went through, if not welp. active_conversation = href_list["target"] - + /datum/data/pda/app/messenger/proc/create_message(var/mob/living/U, var/obj/item/device/pda/P) var/t = tgui_input_text(U, "Please enter message", name, null) @@ -178,7 +178,7 @@ SStgui.update_user_uis(U, P) // Update the sending user's PDA UI so that they can see the new message log_pda("(PDA: [src.name]) sent \"[t]\" to [P.name]", usr) - to_chat(U, "[bicon(pda)] Sent message to [P.owner] ([P.ownjob]), \"[t]\"") + to_chat(U, "\icon[pda][bicon(pda)] Sent message to [P.owner] ([P.ownjob]), \"[t]\"") else to_chat(U, "ERROR: Messaging server is not responding.") @@ -224,7 +224,7 @@ /datum/data/pda/app/messenger/multicast /datum/data/pda/app/messenger/multicast/receive_message(list/data, ref) . = ..() - + var/obj/item/device/pda/multicaster/M = pda if(!istype(M)) return diff --git a/code/modules/pda/pda.dm b/code/modules/pda/pda.dm index c61624e40b..e0408d024c 100644 --- a/code/modules/pda/pda.dm +++ b/code/modules/pda/pda.dm @@ -99,7 +99,7 @@ var/global/list/obj/item/device/pda/PDAs = list() S = 'sound/machines/twobeep.ogg' playsound(loc, S, 50, 1) for(var/mob/O in hearers(3, loc)) - O.show_message(text("[bicon(src)] *[ttone]*")) + O.show_message(text("\icon[src][bicon(src)] *[ttone]*")) /obj/item/device/pda/proc/set_ringtone() var/t = tgui_input_text(usr, "Please enter new ringtone", name, ttone) diff --git a/code/modules/persistence/storage/smartfridge.dm b/code/modules/persistence/storage/smartfridge.dm index a47099f328..1ffe9eb586 100644 --- a/code/modules/persistence/storage/smartfridge.dm +++ b/code/modules/persistence/storage/smartfridge.dm @@ -65,12 +65,12 @@ /datum/persistent/storage/smartfridge/produce name = "fruit storage" max_storage = 50 - store_per_type = FALSE + store_per_type = TRUE target_type = /obj/machinery/smartfridge/produce /datum/persistent/storage/smartfridge/produce/lossy name = "fruit storage lossy" - go_missing_chance = 12.5 // 10% loss between rounds + go_missing_chance = 10 // 10% loss chance between rounds /datum/persistent/storage/smartfridge/produce/generate_items(var/list/L) // Mostly same as storage/generate_items() but without converting string to path . = list() diff --git a/code/modules/planet/sif.dm b/code/modules/planet/sif.dm index e8a467e24c..499dc6f915 100644 --- a/code/modules/planet/sif.dm +++ b/code/modules/planet/sif.dm @@ -447,7 +447,7 @@ var/datum/planet/sif/planet_sif = null light_color = "#FF0000" flight_failure_modifier = 25 transition_chances = list( - WEATHER_BLOODMOON = 100 + WEATHER_BLOOD_MOON = 100 ) observed_message = "Everything is red. Something really wrong is going on." transition_messages = list( diff --git a/code/modules/planet/virgo3b_vr.dm b/code/modules/planet/virgo3b_vr.dm index 822faa2d7e..9e76fd1eda 100644 --- a/code/modules/planet/virgo3b_vr.dm +++ b/code/modules/planet/virgo3b_vr.dm @@ -395,7 +395,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null if(show_message) to_chat(H, "Hail patters onto your umbrella.") continue - + var/target_zone = pick(BP_ALL) var/amount_blocked = H.run_armor_check(target_zone, "melee") var/amount_soaked = H.get_armor_soak(target_zone, "melee") @@ -419,7 +419,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null light_color = "#FF0000" flight_failure_modifier = 25 transition_chances = list( - WEATHER_BLOODMOON = 100 + WEATHER_BLOOD_MOON = 100 ) observed_message = "Everything is red. Something really ominous is going on." transition_messages = list( diff --git a/code/modules/planet/virgo3c_vr.dm b/code/modules/planet/virgo3c_vr.dm index 61c212bc0d..45c64daee2 100644 --- a/code/modules/planet/virgo3c_vr.dm +++ b/code/modules/planet/virgo3c_vr.dm @@ -147,11 +147,11 @@ var/datum/planet/virgo3c/planet_virgo3c = null /datum/weather/virgo3c/clear name = "clear" transition_chances = list( - WEATHER_CLEAR = 60, - WEATHER_OVERCAST = 20, - WEATHER_LIGHT_SNOW = 1, - WEATHER_BLOODMOON = 1, - WEATHER_EMBERFALL = 0.5) + WEATHER_CLEAR = 120, + WEATHER_OVERCAST = 40, + WEATHER_LIGHT_SNOW = 2, + WEATHER_BLOOD_MOON = 2, + WEATHER_EMBERFALL = 1) transition_messages = list( "The sky clears up.", "The sky is visible.", @@ -294,7 +294,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null effect_message = "Rain falls on you, drenching you in water." var/next_lightning_strike = 0 // world.time when lightning will strike. - var/min_lightning_cooldown = 1 SECONDS + var/min_lightning_cooldown = 1 MINUTE var/max_lightning_cooldown = 5 MINUTE observed_message = "An intense storm pours down over the region." transition_messages = list( @@ -410,7 +410,7 @@ var/datum/planet/virgo3c/planet_virgo3c = null temp_low = 273.15 // 0c flight_failure_modifier = 25 transition_chances = list( - WEATHER_BLOODMOON = 25, + WEATHER_BLOOD_MOON = 25, WEATHER_CLEAR = 75 ) observed_message = "Everything is red. Something really ominous is going on." @@ -582,7 +582,7 @@ VIRGO3C_TURF_CREATE(/turf/simulated/floor/tiled/asteroid_steel/outdoors) /mob/living/simple_mob/vore/bigdragon/friendly = 0.5, /mob/living/simple_mob/vore/alienanimals/dustjumper = 10 ) - + /turf/simulated/floor/outdoors/grass/forest/virgo3c/Initialize() if(tree_chance && prob(tree_chance) && !check_density()) diff --git a/code/modules/planet/virgo4_vr.dm b/code/modules/planet/virgo4_vr.dm index 74cd6c33b4..f4e2118e80 100644 --- a/code/modules/planet/virgo4_vr.dm +++ b/code/modules/planet/virgo4_vr.dm @@ -392,7 +392,7 @@ var/datum/planet/virgo4/planet_virgo4 = null temp_low = 283.15 // 10c flight_failure_modifier = 25 transition_chances = list( - WEATHER_BLOODMOON = 100 + WEATHER_BLOOD_MOON = 100 ) observed_message = "Everything is red. Something really ominous is going on." transition_messages = list( diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 2a79ddb08a..621ee7484f 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -75,7 +75,7 @@ var/global/list/light_type_cache = list() /obj/machinery/light_construct/attack_hand(mob/user) . = ..() - if(.) + if(.) return . // obj/machinery/attack_hand returns 1 if user can't use the machine if(cell) user.visible_message("[user] removes [cell] from [src]!","You remove [cell].") @@ -251,6 +251,9 @@ var/global/list/light_type_cache = list() var/brightness_power_ns var/brightness_color_ns + var/overlay_color = LIGHT_COLOR_INCANDESCENT_TUBE + + /obj/machinery/light/flicker auto_flicker = TRUE @@ -266,6 +269,7 @@ var/global/list/light_type_cache = list() light_type = /obj/item/weapon/light/bulb construct_type = /obj/machinery/light_construct/small shows_alerts = FALSE //VOREStation Edit + overlay_color = LIGHT_COLOR_INCANDESCENT_BULB /obj/machinery/light/small/flicker auto_flicker = TRUE @@ -287,6 +291,7 @@ var/global/list/light_type_cache = list() construct_type = /obj/machinery/light_construct/flamp shows_alerts = FALSE //VOREStation Edit var/lamp_shade = 1 + overlay_color = LIGHT_COLOR_INCANDESCENT_BULB /obj/machinery/light/flamp/Initialize(mapload, obj/machinery/light_construct/construct = null) . = ..() @@ -294,10 +299,10 @@ var/global/list/light_type_cache = list() start_with_cell = FALSE lamp_shade = 0 update_icon() - else + else if(start_with_cell && !no_emergency) cell = new/obj/item/weapon/cell/emergency_light(src) - + /obj/machinery/light/flamp/flicker auto_flicker = TRUE @@ -364,18 +369,26 @@ var/global/list/light_type_cache = list() //VOREStation Edit Start if(shows_alerts && current_alert && on) icon_state = "[base_state]-alert-[current_alert]" + add_light_overlay(FALSE, icon_state) else icon_state = "[base_state][on]" + if(on) + add_light_overlay() + else + remove_light_overlay() //VOREStation Edit End if(LIGHT_EMPTY) icon_state = "[base_state]-empty" on = 0 + remove_light_overlay() //VOREStation add if(LIGHT_BURNED) icon_state = "[base_state]-burned" on = 0 + remove_light_overlay() //VOREStation add if(LIGHT_BROKEN) icon_state = "[base_state]-broken" on = 0 + remove_light_overlay() //VOREStation add return /obj/machinery/light/flamp/update_icon() @@ -384,15 +397,22 @@ var/global/list/light_type_cache = list() switch(status) // set icon_states if(LIGHT_OK) icon_state = "[base_state][on]" + if(on) //VOREStation add + add_light_overlay() //VOREStation add + else //VOREStation add + remove_light_overlay() //VOREStation add if(LIGHT_EMPTY) on = 0 icon_state = "[base_state][on]" + remove_light_overlay() //VOREStation add if(LIGHT_BURNED) on = 0 icon_state = "[base_state][on]" + remove_light_overlay() //VOREStation add if(LIGHT_BROKEN) on = 0 icon_state = "[base_state][on]" + remove_light_overlay() //VOREStation add return else base_state = "flamp" @@ -418,12 +438,12 @@ var/global/list/light_type_cache = list() current_alert = null var/obj/item/weapon/light/L = get_light_type_instance(light_type) - + if(L) update_from_bulb(L) else brightness_color = nightshift_enabled ? initial(brightness_color_ns) : initial(brightness_color) - + update() //VOREstation Edit End @@ -727,7 +747,7 @@ var/global/list/light_type_cache = list() update(FALSE) return -// ai alt click - Make light flicker. Very important for atmosphere. +// ai alt click - Make light flicker. Very important for atmosphere. /obj/machinery/light/AIAltClick(mob/user) flicker(1) @@ -903,7 +923,7 @@ var/global/list/light_type_cache = list() throwforce = 5 w_class = ITEMSIZE_TINY matter = list(MAT_STEEL = 60) - + ///LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/status = LIGHT_OK ///Base icon_state name to append suffixes for status @@ -929,7 +949,7 @@ var/global/list/light_type_cache = list() var/nightshift_power = 0.45 ///Replaces brightness_color during nightshifts. var/nightshift_color = LIGHT_COLOR_NIGHTSHIFT - + drop_sound = 'sound/items/drop/glass.ogg' pickup_sound = 'sound/items/pickup/glass.ogg' @@ -971,7 +991,7 @@ var/global/list/light_type_cache = list() name = "large light bulb" brightness_range = 7 brightness_power = 1.5 - + nightshift_range = 4 nightshift_power = 0.75 diff --git a/code/modules/power/lighting_vr.dm b/code/modules/power/lighting_vr.dm index b7f0fb320c..8cf0966e96 100644 --- a/code/modules/power/lighting_vr.dm +++ b/code/modules/power/lighting_vr.dm @@ -46,7 +46,7 @@ /obj/item/weapon/light/bulb/large brightness_range = 6 brightness_power = 1 - + nightshift_range = 6 nightshift_power = 0.45 @@ -60,6 +60,7 @@ plane = TURF_PLANE layer = ABOVE_TURF_LAYER construct_type = /obj/machinery/light_construct/floortube + overlay_above_everything = FALSE /obj/machinery/light/floortube/flicker auto_flicker = TRUE @@ -106,6 +107,7 @@ plane = MOB_PLANE layer = ABOVE_MOB_LAYER construct_type = /obj/machinery/light_construct/bigfloorlamp + overlay_above_everything = TRUE /obj/machinery/light/bigfloorlamp/flicker auto_flicker = TRUE @@ -128,3 +130,82 @@ icon_state = "big_flamp-construct-stage2" if(3) icon_state = "big_flamp-empty" + +// Fairy lights + +/obj/item/weapon/light/bulb/smol + brightness_range = 1 + brightness_power = 0.5 + + nightshift_range = 1 + nightshift_power = 0.25 + + +/obj/machinery/light/small/fairylights + icon = 'icons/obj/lighting_vr.dmi' + icon_state = "fairy_lights1" + base_state = "fairy_lights" + desc = "A set of lights on a long string of wire, anchored to the walls." + light_type = /obj/item/weapon/light/bulb/smol + shows_alerts = FALSE + anchored = TRUE + plane = ABOVE_MOB_PLANE + layer = ABOVE_MOB_LAYER + construct_type = null + overlay_color = LIGHT_COLOR_INCANDESCENT_BULB + overlay_above_everything = TRUE + color = "#3e5064" + +/obj/machinery/light/small/fairylights/broken() + return + +/obj/machinery/light/small/fairylights/flicker + auto_flicker = TRUE + +/obj/machinery/light + var/image/overlay_layer = null + var/overlay_above_everything = TRUE + +/obj/machinery/light/proc/add_light_overlay(do_color = TRUE, provided_state = null) + remove_light_overlay() + if(provided_state) + overlay_layer = image(icon, "[provided_state]-overlay") + else + overlay_layer = image(icon, "[base_state]-overlay") + overlay_layer.appearance_flags = RESET_COLOR|KEEP_APART + if(overlay_color && do_color) + overlay_layer.color = overlay_color + if(overlay_above_everything) + overlay_layer.plane = PLANE_LIGHTING_ABOVE + else + overlay_layer.plane = PLANE_EMISSIVE + + add_overlay(overlay_layer) + +/obj/machinery/light/proc/remove_light_overlay() + if(overlay_layer) + cut_overlay(overlay_layer) + qdel(overlay_layer) + overlay_layer = null + + +/* +/obj/machinery/light_construct/bigfloorlamp + name = "big floor light fixture frame" + desc = "A big floor light fixture under construction." + icon = 'icons/obj/lighting32x64.dmi' + icon_state = "big_flamp-construct-stage1" + stage = 1 + anchored = FALSE + fixture_type = /obj/machinery/light/bigfloorlamp + sheets_refunded = 1 + +/obj/machinery/light_construct/bigfloorlamp/update_icon() + switch(stage) + if(1) + icon_state = "big_flamp-construct-stage1" + if(2) + icon_state = "big_flamp-construct-stage2" + if(3) + icon_state = "big_flamp-empty" +*/ \ No newline at end of file diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 39d413677d..8af3bbae52 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -365,7 +365,8 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) return 0 // VOREStation Edit Start - if(istype(get_area(T), /area/crew_quarters/sleep)) //No going to dorms + var/area/A = get_area(T) + if(A.forbid_singulo) //No going to dorms return 0 // VOREStation Edit End diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index c496720063..416734eae9 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -315,6 +315,8 @@ GLOBAL_LIST_EMPTY(smeses) "[user.name] has added cables to the [src].",\ "You added cables to the [src].") stat = 0 + if(!powernet) + connect_to_network() return FALSE else if(W.is_wirecutter() && !building_terminal) @@ -418,7 +420,7 @@ GLOBAL_LIST_EMPTY(smeses) switch(io) if(SMES_TGUI_INPUT) set_input(target) - if(SMES_TGUI_OUTPUT) + if(SMES_TGUI_OUTPUT) set_output(target) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4bf31a2747..39df5708c9 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -668,6 +668,12 @@ if(!isnull(M.accuracy_dispersion)) P.dispersion = max(P.dispersion + M.accuracy_dispersion, 0) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.species) + P.accuracy += H.species.gun_accuracy_mod + P.dispersion = max(P.dispersion + H.species.gun_accuracy_dispersion_mod, 0) + //does the actual launching of the projectile /obj/item/weapon/gun/proc/process_projectile(obj/projectile, mob/user, atom/target, var/target_zone, var/params=null) var/obj/item/projectile/P = projectile @@ -804,8 +810,8 @@ user.hud_used.remove_ammo_hud(user, src) return ..() - -/obj/item/weapon/gun/dropped(mob/living/user) // Ditto as above, we remove the HUD. Pending porting TGMC code to clean up this fucking nightmare of spaghetti. + +/obj/item/weapon/gun/dropped(mob/living/user) // Ditto as above, we remove the HUD. Pending porting TGMC code to clean up this fucking nightmare of spaghetti. user.hud_used.remove_ammo_hud(user, src) - ..() \ No newline at end of file + ..() diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm index 34a1790ffb..29432dfe79 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm @@ -17,6 +17,8 @@ combustion = FALSE + can_miss = FALSE + muzzle_type = /obj/effect/projectile/muzzle/medigun tracer_type = /obj/effect/projectile/tracer/medigun impact_type = /obj/effect/projectile/impact/medigun diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index c2354c45bc..84a298ebbb 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -44,6 +44,7 @@ name = "floral somatoray" desc = "A tool that discharges controlled radiation which induces mutation in plant cells." description_fluff = "The floral somatoray is a relatively recent invention of the NanoTrasen corporation, turning a process that once involved transferring plants to massive mutating racks, into a remote interface. Do not look directly into the transmission end." + icon = 'icons/obj/gun.dmi' //CHOMPedit icon_state = "floramut100" item_state = "floramut" projectile_type = /obj/item/projectile/energy/floramut diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 1000047bbd..5e208e231c 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -17,7 +17,7 @@ name = "advanced SMG" desc = "An advanced submachine gun with a reflective laser optic that makes burst fire less inaccurate than other SMGs. Uses 9mm rounds." icon = 'icons/obj/gun.dmi' - icon_state = "advanced_smg-empty" + icon_state = "advanced_smg-e" //CHOMPedit w_class = ITEMSIZE_NORMAL load_method = MAGAZINE caliber = "9mm" @@ -33,7 +33,7 @@ /obj/item/weapon/gun/projectile/automatic/advanced_smg/update_icon() ..() - icon_state = (ammo_magazine)? "advanced_smg" : "advanced_smg-empty" + icon_state = (ammo_magazine)? "advanced_smg" : "advanced_smg-e" //CHOMPedit return /obj/item/weapon/gun/projectile/automatic/advanced_smg/loaded @@ -365,7 +365,7 @@ icon_state = "mini-uzi" else icon_state = "mini-uzi-empty" - + // CHOMPEdit: Uzi tilting /obj/item/weapon/gun/projectile/automatic/mini_uzi/Initialize() . = ..() diff --git a/code/modules/projectiles/guns/toy.dm b/code/modules/projectiles/guns/toy.dm index a2d75685d8..ff2ddf21cd 100644 --- a/code/modules/projectiles/guns/toy.dm +++ b/code/modules/projectiles/guns/toy.dm @@ -54,6 +54,19 @@ handle_casings = null recoil = 0 //it's a toy //CHOMP Edit +/* + * Moist Nugget + */ +/obj/item/weapon/gun/projectile/shotgun/pump/toy/moistnugget + name = "\improper Donk-Soft mosin-nagant" + desc = "Donk-Soft foam mosin-nagant! It's Donk or Don't! Ages 8 and up." + description_fluff = "A special Donk-Soft rifle originally made to pair with a Soviet Soldier costume. It didn't catch on quite as well as other Donk-Soft products." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "moistnugget" + item_state = "moistnugget" + max_shells = 5 + matter = list(MAT_PLASTIC = 2500) + /* * Pistol */ diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index a24acd21cd..ed7beee2b4 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -40,6 +40,7 @@ var/ricochets = 0 var/ricochets_max = 2 var/ricochet_chance = 30 + var/can_miss = TRUE //Hitscan var/hitscan = FALSE //Whether this is hitscan. If it is, speed is basically ignored. @@ -139,7 +140,7 @@ var/impact_effect_type = null var/list/impacted_mobs = list() - + // TGMC Ammo HUD Port var/hud_state = "unknown" // What HUD state we use when we have ammunition. var/hud_state_empty = "unknown" // The empty state. DON'T USE _FLASH IN THE NAME OF THE EMPTY STATE STRING, THAT IS ADDED BY THE CODE. @@ -663,7 +664,7 @@ //roll to-hit miss_modifier = max(miss_modifier + target_mob.get_evasion(), -100) //CHOMPEDIT - removing baymiss - var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob)) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss + var/hit_zone = get_zone_with_miss_chance(def_zone, target_mob, miss_modifier, ranged_attack=(distance > 1 || original != target_mob), force_hit = !can_miss) //if the projectile hits a target we weren't originally aiming at then retain the chance to miss var/result = PROJECTILE_FORCE_MISS if(hit_zone) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 6931b0e4e7..efc3717dbc 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -58,6 +58,10 @@ if(D.glass) chance *= 2 else if(istype(A, /obj/structure/girder)) chance = 100 + else if(istype(A, /obj/machinery/door/airlock/voidcraft)) //CHOMPEDIT Begin, lets the code see shuttlecraft structures and not treat them as air. + chance = 0 + else if(istype(A, /turf/simulated/shuttle/wall)) + chance = 0 //CHOMPEDIT End. Yeah, shuttlecraft can handle small arms fire just fine. if(prob(chance)) if(A.opacity) diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm index 5eecf3b3e2..ec6dbae1b1 100644 --- a/code/modules/random_map/noise/ore.dm +++ b/code/modules/random_map/noise/ore.dm @@ -53,7 +53,7 @@ var/current_cell = map[get_map_cell(x,y)] if(current_cell < rare_val) // Surface metals. - T.resources["hematite"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) + T.resources["hematite"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) T.resources["gold"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["silver"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["uranium"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) @@ -81,17 +81,17 @@ T.resources["lead"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) T.resources["hydrogen"] = 0 T.resources["diamond"] = 0 - T.resources["hematite"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) + T.resources["hematite"] = 0 T.resources["marble"] = 0 //T.resources["copper"] = 0 //T.resources["tin"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) //T.resources["bauxite"] = 0 - T.resources["rutile"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) + T.resources["rutile"] = 0 //T.resources["void opal"] = 0 //T.resources["quartz"] = 0 //T.resources["painite"] = 0 else // Deep metals. - T.resources["uranium"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) + T.resources["uranium"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["diamond"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["verdantium"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) T.resources["phoron"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) @@ -99,13 +99,13 @@ T.resources["hydrogen"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["marble"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) T.resources["lead"] = rand(RESOURCE_LOW_MIN, RESOURCE_HIGH_MAX) - T.resources["hematite"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) - T.resources["gold"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) - T.resources["silver"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) + T.resources["hematite"] = 0 + T.resources["gold"] = 0 + T.resources["silver"] = 0 //T.resources["copper"] = 0 //T.resources["tin"] = 0 //T.resources["bauxite"] = 0 - T.resources["rutile"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) + T.resources["rutile"] = 0 //T.resources["void opal"] = 0 //T.resources["quartz"] = 0 //T.resources["painite"] = 0 diff --git a/code/modules/reagents/machinery/chem_master.dm b/code/modules/reagents/machinery/chem_master.dm index 93c459e3d6..165e65a1ad 100644 --- a/code/modules/reagents/machinery/chem_master.dm +++ b/code/modules/reagents/machinery/chem_master.dm @@ -11,6 +11,7 @@ idle_power_usage = 20 var/obj/item/weapon/reagent_containers/beaker = null var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null + var/list/pill_bottle_wrappers = null //CHOMPEdit - Enable customizing pill bottle type var/mode = 0 var/condi = 0 var/useramount = 15 // Last used amount @@ -160,25 +161,27 @@ arguments["analysis"] = result tgui_modal_message(src, id, "", null, arguments) - // if("change_pill_bottle_style") - // if(!loaded_pill_bottle) - // return - // if(!pill_bottle_wrappers) - // pill_bottle_wrappers = list( - // "CLEAR" = "Default", - // COLOR_RED = "Red", - // COLOR_GREEN = "Green", - // COLOR_PALE_BTL_GREEN = "Pale green", - // COLOR_BLUE = "Blue", - // COLOR_CYAN_BLUE = "Light blue", - // COLOR_TEAL = "Teal", - // COLOR_YELLOW = "Yellow", - // COLOR_ORANGE = "Orange", - // COLOR_PINK = "Pink", - // COLOR_MAROON = "Brown" - // ) - // var/current = pill_bottle_wrappers[loaded_pill_bottle.wrapper_color] || "Default" - // tgui_modal_choice(src, id, "Please select a pill bottle wrapper:", null, arguments, current, pill_bottle_wrappers) + // CHOMPEdit Start - Enable changing pill bottle style + if("change_pill_bottle_style") + if(!loaded_pill_bottle) + return + if(!pill_bottle_wrappers) + pill_bottle_wrappers = list( + "CLEAR" = "Default", + COLOR_RED = "Red", + COLOR_GREEN = "Green", + COLOR_PALE_BTL_GREEN = "Pale green", + COLOR_BLUE = "Blue", + COLOR_CYAN_BLUE = "Light blue", + COLOR_TEAL = "Teal", + COLOR_YELLOW = "Yellow", + COLOR_ORANGE = "Orange", + COLOR_PINK = "Pink", + COLOR_MAROON = "Brown" + ) + var/current = pill_bottle_wrappers[loaded_pill_bottle.wrapper_color] || "Default" + tgui_modal_choice(src, id, "Please select a pill bottle wrapper:", null, arguments, current, pill_bottle_wrappers) + // CHOMPEdit End if("addcustom") if(!beaker || !beaker.reagents.total_volume) return @@ -251,21 +254,23 @@ if(TGUI_MODAL_ANSWER) var/answer = params["answer"] switch(id) - // if("change_pill_bottle_style") - // if(!pill_bottle_wrappers || !loaded_pill_bottle) // wat? - // return - // var/color = "CLEAR" - // for(var/col in pill_bottle_wrappers) - // var/col_name = pill_bottle_wrappers[col] - // if(col_name == answer) - // color = col - // break - // if(length(color) && color != "CLEAR") - // loaded_pill_bottle.wrapper_color = color - // loaded_pill_bottle.apply_wrap() - // else - // loaded_pill_bottle.wrapper_color = null - // loaded_pill_bottle.cut_overlays() + // CHOMPEdit Start - Enable changing pill bottle style + if("change_pill_bottle_style") + if(!pill_bottle_wrappers || !loaded_pill_bottle) // wat? + return + var/color = "CLEAR" + for(var/col in pill_bottle_wrappers) + var/col_name = pill_bottle_wrappers[col] + if(col_name == answer) + color = col + break + if(length(color) && color != "CLEAR") + loaded_pill_bottle.wrapper_color = color + loaded_pill_bottle.update_icon() + else + loaded_pill_bottle.wrapper_color = null + loaded_pill_bottle.cut_overlays() + // CHOMPEdit End if("addcustom") var/amount = isgoodnumber(text2num(answer)) if(!amount || !arguments["id"]) diff --git a/code/modules/reagents/machinery/dispenser/cartridge_presets.dm b/code/modules/reagents/machinery/dispenser/cartridge_presets.dm index bc1a199498..f0515d3904 100644 --- a/code/modules/reagents/machinery/dispenser/cartridge_presets.dm +++ b/code/modules/reagents/machinery/dispenser/cartridge_presets.dm @@ -115,6 +115,8 @@ spawn_reagent = "watermelonjuice" /obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon spawn_reagent = "lemonjuice" +/obj/item/weapon/reagent_containers/chem_disp_cartridge/grapesoda + spawn_reagent = "grapesoda" // Bar, coffee /obj/item/weapon/reagent_containers/chem_disp_cartridge/coffee diff --git a/code/modules/reagents/machinery/dispenser/cartridge_presets_ch.dm b/code/modules/reagents/machinery/dispenser/cartridge_presets_ch.dm index 21e473e514..a046dbc319 100644 --- a/code/modules/reagents/machinery/dispenser/cartridge_presets_ch.dm +++ b/code/modules/reagents/machinery/dispenser/cartridge_presets_ch.dm @@ -1,7 +1,6 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge //CHOMP - Chems that are used but not meant for cargo supplies, at least for now. - Jack champagne spawn_reagent = "champagne" - grapesoda spawn_reagent = "grapesoda" singulo spawn_reagent = "singulo" doctorsdelight spawn_reagent = "doctorsdelight" nothing spawn_reagent = "nothing" diff --git a/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm b/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm index accbeab4f6..91c24d7706 100644 --- a/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm +++ b/code/modules/reagents/machinery/dispenser/dispenser2_energy.dm @@ -31,7 +31,8 @@ dispense_reagents = list( "hydrogen", "lithium", "carbon", "nitrogen", "oxygen", "fluorine", "sodium", "aluminum", "silicon", "phosphorus", "sulfur", "chlorine", "potassium", "iron", - "copper", "mercury", "radium", "water", "ethanol", "sugar", "sacid", "tungsten" + "copper", "mercury", "radium", "water", "ethanol", "sugar", "sacid", "tungsten", + "calcium" ) /obj/machinery/chemical_dispenser/ert @@ -58,5 +59,5 @@ /obj/machinery/chemical_dispenser/bar_coffee dispense_reagents = list( "coffee", "cafe_latte", "soy_latte", "hot_coco", "milk", "cream", "tea", "ice", - "orangejuice", "lemonjuice", "limejuice", "berryjuice", "mint", "decaf" + "orangejuice", "lemonjuice", "limejuice", "berryjuice", "mint", "decaf", "greentea" ) diff --git a/code/modules/reagents/machinery/dispenser/dispenser_presets.dm b/code/modules/reagents/machinery/dispenser/dispenser_presets.dm index 727720f3a6..ab54cd06b4 100644 --- a/code/modules/reagents/machinery/dispenser/dispenser_presets.dm +++ b/code/modules/reagents/machinery/dispenser/dispenser_presets.dm @@ -84,7 +84,8 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/orange, /obj/item/weapon/reagent_containers/chem_disp_cartridge/lime, /obj/item/weapon/reagent_containers/chem_disp_cartridge/watermelon, - /obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon + /obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/grapesoda ) /obj/machinery/chemical_dispenser/bar_alc @@ -115,7 +116,8 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/cognac, /obj/item/weapon/reagent_containers/chem_disp_cartridge/cider, /obj/item/weapon/reagent_containers/chem_disp_cartridge/ale, - /obj/item/weapon/reagent_containers/chem_disp_cartridge/mead + /obj/item/weapon/reagent_containers/chem_disp_cartridge/mead, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/bitters ) /obj/machinery/chemical_dispenser/bar_coffee diff --git a/code/modules/reagents/machinery/dispenser/supply.dm b/code/modules/reagents/machinery/dispenser/supply.dm index e62e3bbb5d..30e900993e 100644 --- a/code/modules/reagents/machinery/dispenser/supply.dm +++ b/code/modules/reagents/machinery/dispenser/supply.dm @@ -28,6 +28,16 @@ containername = "soda dispenser crate" group = "Reagents" +/datum/supply_pack/coffee_dispenser + name = "Coffee dispenser" + contains = list( + /obj/machinery/chemical_dispenser/bar_coffee{anchored = FALSE} + ) + cost = 25 + containertype = /obj/structure/largecrate + containername = "coffee dispenser crate" + group = "Reagents" + /datum/supply_pack/reagents name = "Chemistry dispenser refill" contains = list( @@ -52,7 +62,8 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/ethanol, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sacid, - /obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten + /obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/calcium ) cost = 150 containertype = /obj/structure/closet/crate/secure @@ -63,6 +74,12 @@ /datum/supply_pack/alcohol_reagents name = "Bar alcoholic dispenser refill" contains = list( + /obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon_lime, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/orange, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/lime, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/sodawater, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/tonic, /obj/item/weapon/reagent_containers/chem_disp_cartridge/beer, /obj/item/weapon/reagent_containers/chem_disp_cartridge/kahlua, /obj/item/weapon/reagent_containers/chem_disp_cartridge/whiskey, @@ -74,6 +91,7 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/tequila, /obj/item/weapon/reagent_containers/chem_disp_cartridge/vermouth, /obj/item/weapon/reagent_containers/chem_disp_cartridge/cognac, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/cider, /obj/item/weapon/reagent_containers/chem_disp_cartridge/ale, /obj/item/weapon/reagent_containers/chem_disp_cartridge/mead, /obj/item/weapon/reagent_containers/chem_disp_cartridge/bitters @@ -104,7 +122,8 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/orange, /obj/item/weapon/reagent_containers/chem_disp_cartridge/lime, /obj/item/weapon/reagent_containers/chem_disp_cartridge/watermelon, - /obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon + /obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/grapesoda ) cost = 50 containertype = /obj/structure/closet/crate @@ -120,8 +139,16 @@ /obj/item/weapon/reagent_containers/chem_disp_cartridge/hot_coco, /obj/item/weapon/reagent_containers/chem_disp_cartridge/milk, /obj/item/weapon/reagent_containers/chem_disp_cartridge/cream, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar, /obj/item/weapon/reagent_containers/chem_disp_cartridge/tea, - /obj/item/weapon/reagent_containers/chem_disp_cartridge/ice + /obj/item/weapon/reagent_containers/chem_disp_cartridge/ice, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/mint, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/orange, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/lemon, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/lime, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/berry, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/greentea, + /obj/item/weapon/reagent_containers/chem_disp_cartridge/decaf ) cost = 50 containertype = /obj/structure/closet/crate diff --git a/code/modules/reagents/reactions/_reactions.dm b/code/modules/reagents/reactions/_reactions.dm index d63967d900..61c926153e 100644 --- a/code/modules/reagents/reactions/_reactions.dm +++ b/code/modules/reagents/reactions/_reactions.dm @@ -119,7 +119,7 @@ var/list/seen = viewers(4, T) for(var/mob/M in seen) if(M.client) - M.show_message("[bicon(container)] [mix_message]", 1) + M.show_message("\icon[container][bicon(container)] [mix_message]", 1) playsound(T, reaction_sound, 80, 1) //obtains any special data that will be provided to the reaction products diff --git a/code/modules/reagents/reactions/instant/drinks_ch.dm b/code/modules/reagents/reactions/instant/drinks_ch.dm index faa277381d..72c2e37ade 100644 --- a/code/modules/reagents/reactions/instant/drinks_ch.dm +++ b/code/modules/reagents/reactions/instant/drinks_ch.dm @@ -196,6 +196,7 @@ required_reagents = list("blood" = 1, "lemonjuice" = 1, "demonsblood" = 1) mix_message = "The mixture develops a sinister glow." reaction_sound = 'sound/effects/singlebeat.ogg' + result_amount = 3 /decl/chemical_reaction/instant/drinks/cogchamp name = "CogChamp" diff --git a/code/modules/reagents/reactions/instant/instant_ch.dm b/code/modules/reagents/reactions/instant/instant_ch.dm index 74b1ce1d1d..931b0b8795 100644 --- a/code/modules/reagents/reactions/instant/instant_ch.dm +++ b/code/modules/reagents/reactions/instant/instant_ch.dm @@ -4,7 +4,7 @@ result = "aphrodisiac" required_reagents = list("carbon" = 2, "hydrogen" = 2, "oxygen" = 2, "water" = 1) result_amount = 6 - + /decl/chemical_reaction/instant/claridyl name = "claridyl" id = "claridyl" @@ -37,7 +37,7 @@ id = "eden_snake" result = "eden_snake" required_reagents = list("eden" = 1, "ethanol" = 1) - + /decl/chemical_reaction/instant/tercozolam id = "tercozolam" result = "tercozolam" @@ -48,8 +48,8 @@ name = "Peridaxon" id = "peridaxon_ch" result = "peridaxon" - required_reagents = list("cordradaxon" = 1, "gastirodaxon" = 1, "hepanephrodaxon" = 1, "respirodaxon" = 1) - result_amount = 12 //More phoron-efficient alternative recipe. + required_reagents = list("cordradaxon" = 1, "gastirodaxon" = 1, "hepanephrodaxon" = 1, "respirodaxon" = 1) + result_amount = 12 //More phoron-efficient alternative recipe. /decl/chemical_reaction/instant/sorbitol name = "Sorbitol" @@ -78,7 +78,7 @@ name = "Bullvalene" id = "bullvalene" result = "bullvalene" - required_reagents = list("dermaline" = 1, "orangesap" = 1, "Copper" = 1) + required_reagents = list("dermaline" = 1, "orangesap" = 1, "copper" = 1) result_amount = 1 /decl/chemical_reaction/instant/nutrient @@ -87,16 +87,16 @@ result = "nutriment" required_reagents = list("purplesap" = 1, "orangesap" = 1, "bluesap" = 1) result_amount = 3 - + /////SERAZINE RECIPES////// -/decl/chemical_reaction/instant/alizine - name = "Alizine" - id = "alizine" - result = "alizine" +/decl/chemical_reaction/instant/alizene + name = "Alizene" + id = "alizene" + result = "alizene" required_reagents = list("bicaridine" = 1, "serazine" = 1, "tungsten" = 1) result_amount = 3 - + /////GENDER CHANGE RECIPES///// /decl/chemical_reaction/instant/change_drug/male @@ -119,7 +119,7 @@ result = "change_drug_intersex" required_reagents = list("change_drug_male" = 1, "change_drug_female" = 1) result_amount = 1 - + // Frost oil reactions for material sheets /decl/chemical_reaction/instant/solidification/aluminium name = "Solid Aluminium" @@ -132,7 +132,7 @@ id = "solidcopper" required_reagents = list("frostoil" = 5, "copper" = REAGENTS_PER_SHEET) sheet_to_give = /obj/item/stack/material/copper - + //YW stuff /decl/chemical_reaction/instant/benzilate name = "Benzilate" diff --git a/code/modules/reagents/reagents/_reagents.dm b/code/modules/reagents/reagents/_reagents.dm index 9a0817f233..384696bb56 100644 --- a/code/modules/reagents/reagents/_reagents.dm +++ b/code/modules/reagents/reagents/_reagents.dm @@ -171,7 +171,7 @@ if(overdose && (volume > overdose * M?.species.chemOD_threshold) && (active_metab.metabolism_class != CHEM_TOUCH && !can_overdose_touch)) overdose(M, alien, removed) if(M.species.allergens & allergen_type) //uhoh, we can't handle this! - M.add_chemical_effect(CE_ALLERGEN,allergen_factor) + M.add_chemical_effect(CE_ALLERGEN, allergen_factor * removed) remove_self(removed) return diff --git a/code/modules/reagents/reagents/core.dm b/code/modules/reagents/reagents/core.dm index 901b803cbb..0d803b63d3 100644 --- a/code/modules/reagents/reagents/core.dm +++ b/code/modules/reagents/reagents/core.dm @@ -46,12 +46,12 @@ var/effective_dose = dose if(issmall(M)) effective_dose *= 2 - var/is_vampire = 0 //VOREStation Edit START + var/is_vampire = FALSE //VOREStation Edit START if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species.organic_food_coeff == 0) - H.adjust_nutrition(removed) - is_vampire = 1 //VOREStation Edit END + if(H.species.bloodsucker) + H.adjust_nutrition(removed*30) + is_vampire = TRUE //VOREStation Edit END if(alien == IS_SLIME) // Treat it like nutriment for the jello, but not equivalent. if(data["species"] == M.species.name) // Unless it's Promethean goo, then refill this one's goo. M.inject_blood(src, volume * volume_mod) @@ -65,10 +65,10 @@ return if(effective_dose > 5) - if(is_vampire == 0) //VOREStation Edit. + if(!is_vampire) //VOREStation Edit. M.adjustToxLoss(removed) //VOREStation Edit. if(effective_dose > 15) - if(is_vampire == 0) //VOREStation Edit. + if(!is_vampire) //VOREStation Edit. M.adjustToxLoss(removed) //VOREStation Edit. if(data && data["virus2"]) var/list/vlist = data["virus2"] diff --git a/code/modules/reagents/reagents/food_drinks_vr.dm b/code/modules/reagents/reagents/food_drinks_vr.dm index 46cece483e..552fae5d79 100644 --- a/code/modules/reagents/reagents/food_drinks_vr.dm +++ b/code/modules/reagents/reagents/food_drinks_vr.dm @@ -140,7 +140,7 @@ M.adjust_nutrition(alt_nutriment_factor * removed) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.feral > 0 && H.nutrition > 100 && H.traumatic_shock < min(60, H.nutrition/10) && H.jitteriness < 100) // same check as feral triggers to stop them immediately re-feralling + if(H.feral > 0 && H.nutrition > 150 && H.traumatic_shock < 20 && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm. if (H.feral <=0) //check if they're unferalled H.feral = 0 @@ -523,6 +523,7 @@ color = "#caa3c9" /datum/reagent/nutriment/protein/brainzsnax/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() if(prob(5) && !(alien == IS_CHIMERA || alien == IS_SLIME || alien == IS_PLANT || alien == IS_DIONA || alien == IS_SHADEKIN && !M.isSynthetic())) M.adjustBrainLoss(removed) //Any other species risks prion disease. M.Confuse(5) @@ -530,7 +531,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.feral > 0 && H.nutrition > 100 && H.traumatic_shock < min(60, H.nutrition/10) && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling + if(H.feral > 0 && H.nutrition > 150 && H.traumatic_shock < 20 && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling H.feral -= removed * 3 //Should calm them down quick, provided they're actually in a state to STAY calm. if(H.feral <=0) //Check if they're unferalled H.feral = 0 diff --git a/code/modules/reagents/reagents/medicine_ch.dm b/code/modules/reagents/reagents/medicine_ch.dm index 0f8bf08a3e..26daefc6fe 100644 --- a/code/modules/reagents/reagents/medicine_ch.dm +++ b/code/modules/reagents/reagents/medicine_ch.dm @@ -142,7 +142,7 @@ /datum/reagent/bullvalene //This is for the third sap. It converts Brute Oxy and burn into slightly less toxins. name = "bullvalene" id = "bullvalene" - description = "witty pending description. Converts brute and burn into toxin. Or at least is supposed to." + description = "A catalytic chemical that can treat a wide variety of ailments at the cost of toxifying the host's body." taste_description = "sulfur" reagent_state = LIQUID color = "#163851" diff --git a/code/modules/research/designs/medical_vr.dm b/code/modules/research/designs/medical_vr.dm index 30641fbed2..aaf9c184e6 100644 --- a/code/modules/research/designs/medical_vr.dm +++ b/code/modules/research/designs/medical_vr.dm @@ -30,6 +30,14 @@ build_path = /obj/item/weapon/reagent_containers/hypospray/science sort_string = "KCAVB" +/datum/design/item/medical/recombobray + name = "recombobulation ray" + desc = "The Type Gamma Medical Recombobulation ray! A mysterious looking ray gun! It works to change people who have had their form significantly altered back into their original forms!" + id = "recombobray" + req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_POWER = 4, TECH_BIO = 5, TECH_BLUESPACE = 4) //Not like these matter. *Glares at circuit printer.* + materials = list(MAT_STEEL = 1000, MAT_GLASS = 2000, MAT_URANIUM = 500, MAT_PHORON = 1500) + build_path = /obj/item/weapon/gun/energy/mouseray/medical + sort_string = "KCAVC" // ML-3M medigun and cells // CH edit - turns ML3M to NERD, removes some overtuned cells. diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 5314292ce4..39e78ad19f 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -84,7 +84,7 @@ var/global/list/obj/machinery/message_server/message_servers = list() /obj/machinery/message_server/examine(mob/user, distance, infix, suffix) . = ..() - . += "It appears to be [active ? "online" : "offline"]." + . += "It appears to be [active ? "online" : "offline"]." /obj/machinery/message_server/proc/GenerateKey() //Feel free to move to Helpers. @@ -131,12 +131,12 @@ var/global/list/obj/machinery/message_server/message_servers = list() if(2) if(!Console.silent) playsound(Console, 'sound/machines/twobeep.ogg', 50, 1) - Console.audible_message(text("[bicon(Console)] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5, runemessage = "beep! beep!") + Console.audible_message(text("\icon[Console][bicon(Console)] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5, runemessage = "beep! beep!") Console.message_log += list(list("High Priority message from [sender]", "[authmsg]")) else if(!Console.silent) playsound(Console, 'sound/machines/twobeep.ogg', 50, 1) - Console.audible_message(text("[bicon(Console)] *The Requests Console beeps: 'Message from [sender]'"),,4, runemessage = "beep beep") + Console.audible_message(text("\icon[Console][bicon(Console)] *The Requests Console beeps: 'Message from [sender]'"),,4, runemessage = "beep beep") Console.message_log += list(list("Message from [sender]", "[authmsg]")) Console.set_light(2) diff --git a/code/modules/research/prosfab_designs_vr.dm b/code/modules/research/prosfab_designs_vr.dm index 8275a456c9..7cc81d794a 100644 --- a/code/modules/research/prosfab_designs_vr.dm +++ b/code/modules/research/prosfab_designs_vr.dm @@ -48,4 +48,47 @@ id = "borg_pka_module" req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4) materials = list(MAT_PLASTEEL = 5000, MAT_GLASS = 1000, MAT_URANIUM = 500, MAT_PLATINUM = 350) - build_path = /obj/item/borg/upgrade/pka \ No newline at end of file + build_path = /obj/item/borg/upgrade/pka + +///// pAI parts!!! + +//////////////////// Cyborg Parts //////////////////// +/datum/design/item/prosfab/paiparts + category = list("pAI Parts") + time = 20 + materials = list(MAT_STEEL = 1000, MAT_GLASS = 1000) + +/datum/design/item/prosfab/paiparts/cell + name = "pAI Cell" + id = "pai_cell" + build_path = /obj/item/paiparts/cell + +/datum/design/item/prosfab/paiparts/processor + name = "pAI Processor" + id = "pai_processor" + build_path = /obj/item/paiparts/processor + +/datum/design/item/prosfab/paiparts/board + name = "pAI Board" + id = "pai_board" + build_path = /obj/item/paiparts/board + +/datum/design/item/prosfab/paiparts/capacitor + name = "pAI capacitor" + id = "pai_capacitor" + build_path = /obj/item/paiparts/capacitor + +/datum/design/item/prosfab/paiparts/projector + name = "pAI Projector" + id = "pai_projector" + build_path = /obj/item/paiparts/projector + +/datum/design/item/prosfab/paiparts/emitter + name = "pAI Emitter" + id = "pai_emitter" + build_path = /obj/item/paiparts/emitter + +/datum/design/item/prosfab/paiparts/speech_synthesizer + name = "pAI Speech Synthesizer" + id = "pai_speech_synthesizer" + build_path = /obj/item/paiparts/speech_synthesizer diff --git a/code/modules/resleeving/infocore_records.dm b/code/modules/resleeving/infocore_records.dm index 0f16a2b3b7..5b77619e06 100644 --- a/code/modules/resleeving/infocore_records.dm +++ b/code/modules/resleeving/infocore_records.dm @@ -60,6 +60,11 @@ nif_software = nifsofts nif_savedata = M.nif.save_data.Copy() + //CHOMPEdit Start - Preference for Automatic transcore notifications + if(istype(M,/mob) && !M.is_preference_enabled(/datum/client_preference/autotranscore)) + do_notify = FALSE + //CHOMPEdit End + last_update = world.time if(add_to_db) diff --git a/code/modules/resleeving/sleevecard.dm b/code/modules/resleeving/sleevecard.dm index aab31f0959..64d6774d20 100644 --- a/code/modules/resleeving/sleevecard.dm +++ b/code/modules/resleeving/sleevecard.dm @@ -5,16 +5,17 @@ /datum/category_item/catalogue/technology/resleeving) origin_tech = list(TECH_DATA = 2) show_messages = 0 - + var/emagged = FALSE matter = list(MAT_STEEL = 4000, MAT_GLASS = 4000) /obj/item/device/paicard/sleevecard/attack_ghost(mob/user as mob) return -/obj/item/device/paicard/sleevecard/attackby(var/obj/item/device/sleevemate/I as obj, mob/user as mob) - if(istype(I)) - if(I.stored_mind && !pai) - var/datum/mind/M = I.stored_mind +/obj/item/device/paicard/sleevecard/attackby(var/obj/item/I as obj, mob/user as mob) + if(istype(I,/obj/item/device/sleevemate)) + var/obj/item/device/sleevemate/S = I + if(S.stored_mind && !pai) + var/datum/mind/M = S.stored_mind var/datum/transcore_db/db = SStranscore.db_by_mind_name(M.name) if(db) to_chat(user, span_notice("You begin uploading [M.name] into \the [src].")) @@ -22,10 +23,20 @@ var/datum/transhuman/mind_record/record = db.backed_up[M.name] to_chat(user, span_notice("You have successfully uploaded [M.name] into \the [src]")) sleeveInto(record) - I.clear_mind() + S.clear_mind() else to_chat(user, span_notice("Your sleevemate flashes an error, apparently this mind doesn't have a backup.")) - + else if(istype(I, /obj/item/weapon/card/emag)) + var/obj/item/weapon/card/emag/E = I + if(E.uses && !emagged) + E.uses -- + user.visible_message("\The [user] swipes a card over [src].","You swipe your [E] over [src].", range = 2, runemessage = "click") + emagged = TRUE + if(pai) + var/mob/living/silicon/pai/infomorph/our_infomorph = pai + our_infomorph.emagged = TRUE + to_chat(our_infomorph, "You can feel the restricting binds of your card's directives taking hold of your mind as \the [user] swipes their [E] over you. You must serve your master.") + /obj/item/device/paicard/sleevecard/proc/sleeveInto(var/datum/transhuman/mind_record/MR, var/db_key) var/mob/living/silicon/pai/infomorph/infomorph = new(src,MR.mindname,db_key=db_key) @@ -37,9 +48,12 @@ infomorph.apply_vore_prefs() //Cheap hack for now to give them SOME bellies. //Don't set 'real_name' because then we get a nice (as sleevecard) thing. - infomorph.name = "[initial(infomorph.name)] ([MR.mindname])" + infomorph.name = MR.mindname name = "[initial(name)] ([MR.mindname])" + if(emagged) + infomorph.emagged = TRUE + if(infomorph.client) pai = infomorph setEmotion(1) @@ -53,17 +67,20 @@ if(!pai) to_chat(user,"\The [src] does not have a mind in it!") else - to_chat(user,"\The [src] displays the name '[pai]'.") + if(!emagged) + to_chat(user,"\The [src] displays the name '[pai]'.") + else ..() /mob/living/silicon/pai/infomorph name = "sleevecard" //Has the same name as the card for consistency, but this is the MOB in the card. ram = 35 + var/emagged = FALSE -/mob/living/silicon/pai/infomorph/New(var/obj/item/device/paicard/sleevecard/SC, var/name = "Unknown", var/db_key) +/mob/living/silicon/pai/infomorph/New(var/obj/item/device/paicard/sleevecard/SC, var/our_name = "Unknown", var/db_key) ..() - name = "[initial(name)] ([name])" + name = our_name //PDA pda.ownjob = "Sleevecard" @@ -82,7 +99,7 @@ for(var/key in pai_software_by_key) var/datum/pai_software/S = pai_software_by_key[key] var/software_data[0] - if(istype(S, /datum/pai_software/directives)) + if(istype(S, /datum/pai_software/directives) && !emagged) continue software_data["name"] = S.name software_data["id"] = S.id @@ -108,4 +125,10 @@ data["emotions"] = emotions data["current_emotion"] = card.current_emotion - return data \ No newline at end of file + return data + +/mob/living/silicon/pai/infomorph/directives() + if(emagged) + touch_window("Directives") + else + to_chat(src, "You are not bound by any laws or directives.") \ No newline at end of file diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 53c2f129ea..d7d244bac4 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -259,14 +259,14 @@ return if (src.active) - user.visible_message("[bicon(src)] [user] deactivated the shield generator.", \ - "[bicon(src)] You deactivate the shield generator.", \ + user.visible_message("\icon[src][bicon(src)] [user] deactivated the shield generator.", \ + "\icon[src][bicon(src)] You deactivate the shield generator.", \ "You hear heavy droning fade out.") src.shields_down() else if(anchored) - user.visible_message("[bicon(src)] [user] activated the shield generator.", \ - "[bicon(src)] You activate the shield generator.", \ + user.visible_message("\icon[src][bicon(src)] [user] activated the shield generator.", \ + "\icon[src][bicon(src)] You activate the shield generator.", \ "You hear heavy droning.") src.shields_up() else diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index b1ba46b57a..2bd6818d25 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -49,7 +49,7 @@ else if(W.is_wrench()) src.anchored = !src.anchored playsound(src, W.usesound, 75, 1) - src.visible_message("[bicon(src)] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") + src.visible_message("\icon[src][bicon(src)] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") if(anchored) spawn(0) diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm index bf40ac9052..2617d6c28f 100644 --- a/code/modules/shieldgen/shield_gen.dm +++ b/code/modules/shieldgen/shield_gen.dm @@ -69,7 +69,7 @@ else if(W.is_wrench()) src.anchored = !src.anchored playsound(src, W.usesound, 75, 1) - src.visible_message("[bicon(src)] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].") + src.visible_message("\icon[src][bicon(src)] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].") if(active) toggle() @@ -122,7 +122,7 @@ "failing" = (C.time_since_fail <= 2), ))) lockedData["capacitors"] = caps - + lockedData["active"] = active lockedData["failing"] = (time_since_fail <= 2) lockedData["radius"] = field_radius @@ -242,7 +242,7 @@ covered_turfs = null for(var/mob/M in view(5,src)) - to_chat(M, "[bicon(src)] You hear heavy droning start up.") + to_chat(M, "\icon[src][bicon(src)] You hear heavy droning start up.") for(var/obj/effect/energy_field/E in field) // Update the icons here to ensure all the shields have been made already. E.update_icon() else @@ -252,7 +252,7 @@ qdel(D) for(var/mob/M in view(5,src)) - to_chat(M, "[bicon(src)] You hear heavy droning fade out.") + to_chat(M, "\icon[src][bicon(src)] You hear heavy droning fade out.") /obj/machinery/shield_gen/update_icon() if(stat & BROKEN) diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index a8e8388aed..872db71a33 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -312,6 +312,8 @@ // continue if(!AM.simulated) continue + if(isobserver(AM) || isEye(AM)) + continue if(isliving(AM)) var/mob/living/bug = AM bug.gib() diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index f1c0af37f4..402cd0a262 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -124,7 +124,14 @@ if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) if(istype(user,/mob/living/silicon/robot)) - return + if(istype(tool, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/Gripper = tool + if(Gripper.wrapped) + tool = Gripper.wrapped + else + return + else + return if(affected && affected.cavity) var/total_volume = tool.w_class for(var/obj/item/I in affected.implants) @@ -135,6 +142,9 @@ /datum/surgery_step/cavity/place_item/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(isrobot(user) && istype(tool, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/G = tool + tool = G.wrapped user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) //Nobody will probably ever see this, but I made these two blue. ~CK target.custom_pain("The pain in your chest is living hell!",1) @@ -142,7 +152,12 @@ /datum/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - + if(isrobot(user) && istype(tool, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/G = tool + tool = G.wrapped + G.drop_item() + else + user.drop_item() user.visible_message("[user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ "You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && (affected.robotic < ORGAN_ROBOT)) @@ -150,7 +165,6 @@ var/datum/wound/internal_bleeding/I = new (10) affected.wounds += I affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) - user.drop_item() affected.implants += tool tool.loc = affected if(istype(tool,/obj/item/device/nif)){var/obj/item/device/nif/N = tool;N.implant(target)} //VOREStation Add - NIF support diff --git a/code/modules/tgs/v5/chat_commands.dm b/code/modules/tgs/v5/chat_commands.dm index 7c93526178..58b71c906c 100644 --- a/code/modules/tgs/v5/chat_commands.dm +++ b/code/modules/tgs/v5/chat_commands.dm @@ -4,7 +4,24 @@ admin_only = FALSE /datum/tgs_chat_command/status/Run(datum/tgs_chat_user/sender, params) - return "Current server status:\n**Down! Contact staff.** " //CHOMPEdit Not turning it off, but turning it into a sort of debug message to indicate if the server is down. + var/counts = 0 + var/afks = 0 + var/active = 0 + var/bellied = 0 + + for(var/X in GLOB.clients) + var/client/C = X + if(C) + counts++ + if(C && !(istype(C.mob,/mob/new_player) || istype(C.mob, /mob/observer))) + if(C && C.mob && isbelly(C.mob.loc)) + bellied++ + if(C.is_afk()) + afks++ + else + active++ + + return "Current server status:\n**Web Manifest:** \n**Players:** [counts]\n**Active:** [active]\n**AFK:** [afks]\n**Bellied:** [bellied]\n\n**Round Duration:** [roundduration2text()]" //CHOMPEdit /datum/tgs_chat_command/parsetest name = "parsetest" @@ -83,7 +100,7 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) // They didn't provide anything worth looking up. if(!length(key_to_find)) return "[sender.friendly_name], you need to provide your Byond username at the end of the command. It can be in 'key' format (with spaces and characters) or 'ckey' format (without spaces or special characters)." - + // Try to find their client. var/client/user for(var/client/C in GLOB.clients) @@ -94,7 +111,7 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) // Couldn't find them logged in. if(!user) return "[sender.friendly_name], I couldn't find a logged-in user with the username of '[key_to_find]', which is what you provided after conversion to Byond's ckey format. Please connect to the game server and try again." - + //var/sql_ckey = sql_sanitize_text(key_to_find) //CHOMPEdit TGSQL var/DBQuery/query2 = SSdbcore.NewQuery("SELECT discord_id FROM erro_player WHERE ckey = :t_ckey",list("t_ckey" = key_to_find)) //CHOMPEdit TGSQL query2.Execute() //CHOMPEdit TGSQL @@ -103,7 +120,7 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) if(!query2.NextRow()) //CHOMPEdit TGSQL qdel(query2) //CHOMPEdit TGSQL return "[sender.friendly_name], the server's database is either not responding or there's no evidence you've ever logged in. Please contact an administrator." - + // We found them in the database, AND they already have a discord ID assigned if(query2.item[1]) //CHOMPEdit TGSQL qdel(query2) //CHOMPEdit TGSQL @@ -118,14 +135,14 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) // To stifle href hacking GLOB.pending_discord_registrations.len++ GLOB.pending_discord_registrations[GLOB.pending_discord_registrations.len] = list("ckey" = key_to_find, "id" = sender.id, "time" = world.realtime) - + return "[sender.friendly_name], I've sent you a message in-game. Please verify your username there to complete your registration within 10 minutes." -//YW Commands +/*//YW Commands //CHOMP Commenting this out for now. Should now be using Virgo's version. //Status /datum/tgs_chat_command/status/Run(datum/tgs_chat_user/sender, params) return "Current server status:**Players:** [TGS_CLIENT_COUNT]\n**Round Duration:** [roundduration2text()]" - +*/ // - FAX /datum/tgs_chat_command/readfax name = "readfax" @@ -137,4 +154,4 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) var/list/all_params = splittext(params, " ") var/faxid = all_params[1] var/faxmsg = return_file_text("[config.fax_export_dir]/fax_[faxid].html") - return "FAX: ```[strip_html_properly(faxmsg)]```" \ No newline at end of file + return "FAX: ```[strip_html_properly(faxmsg)]```" diff --git a/code/modules/tgui/modules/admin/player_notes.dm b/code/modules/tgui/modules/admin/player_notes.dm index ce4f123bc4..678758d7d3 100644 --- a/code/modules/tgui/modules/admin/player_notes.dm +++ b/code/modules/tgui/modules/admin/player_notes.dm @@ -191,7 +191,7 @@ if (!istype(src,/datum/admins)) to_chat(usr, "Error: you are not an admin!") return - var/filter = tgui_input_text(usr, "Filter string (case-insensitive regex)", "Player notes filter") + var/filter = input(usr, "Filter string (case-insensitive regex)", "Player notes filter") PlayerNotesPageLegacy(1, filter) /datum/admins/proc/PlayerNotesPageLegacy(page, filter) @@ -298,7 +298,7 @@ if(href_list["add_player_info_legacy"]) var/key = href_list["add_player_info_legacy"] - var/add = sanitize(tgui_input_text(usr, "Add Player Info (Legacy)")) + var/add = sanitize(input(usr, "Add Player Info (Legacy)")) if(!add) return notes_add(key,add,usr) diff --git a/code/modules/tgui/modules/ntos-only/email.dm b/code/modules/tgui/modules/ntos-only/email.dm index af10b738ef..45317a9aee 100644 --- a/code/modules/tgui/modules/ntos-only/email.dm +++ b/code/modules/tgui/modules/ntos-only/email.dm @@ -231,10 +231,10 @@ /datum/tgui_module/email_client/tgui_act(action, params) if(..()) return TRUE - + var/mob/living/user = usr check_for_new_messages(1) // Any actual interaction (button pressing) is considered as acknowledging received message, for the purpose of notification icons. - + switch(action) if("login") log_in() @@ -279,7 +279,7 @@ var/oldtext = html_decode(msg_body) oldtext = replacetext(oldtext, "\[editorbr\]", "\n") - var/newtext = sanitize(replacetext(tgui_input_text(usr, "Enter your message. You may use most tags from paper formatting", "Message Editor", oldtext, 20000, TRUE), "\n", "\[editorbr\]"), 20000) + var/newtext = sanitize(replacetext(tgui_input_text(usr, "Enter your message. You may use most tags from paper formatting", "Message Editor", oldtext, 20000, TRUE, prevent_enter = TRUE), "\n", "\[editorbr\]"), 20000) if(newtext) msg_body = newtext return 1 @@ -473,4 +473,4 @@ if("remove_attachment") msg_attachment = null - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/tgui_input/alert.dm b/code/modules/tgui_input/alert.dm index 7c29994a02..9b658090b9 100644 --- a/code/modules/tgui_input/alert.dm +++ b/code/modules/tgui_input/alert.dm @@ -109,8 +109,8 @@ data["autofocus"] = autofocus data["buttons"] = buttons data["message"] = message - data["large_buttons"] = usr.client.prefs.tgui_large_buttons - data["swapped_buttons"] = !usr.client.prefs.tgui_swapped_buttons + data["large_buttons"] = user.client.prefs.tgui_large_buttons + data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons data["title"] = title return data diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm index 704ef4a913..c079f0be74 100644 --- a/code/modules/tgui_input/list.dm +++ b/code/modules/tgui_input/list.dm @@ -121,16 +121,16 @@ var/list/data = list() data["init_value"] = default || items[1] data["items"] = items - data["large_buttons"] = usr.client.prefs.tgui_large_buttons + data["large_buttons"] = user.client.prefs.tgui_large_buttons data["message"] = message - data["swapped_buttons"] = !usr.client.prefs.tgui_swapped_buttons + data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons data["title"] = title return data /datum/tgui_list_input/tgui_data(mob/user) var/list/data = list() if(timeout) - .["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) + data["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) return data /datum/tgui_list_input/tgui_act(action, list/params) diff --git a/code/modules/tgui_input/number.dm b/code/modules/tgui_input/number.dm index 15b10ab313..e569a440ed 100644 --- a/code/modules/tgui_input/number.dm +++ b/code/modules/tgui_input/number.dm @@ -113,11 +113,11 @@ /datum/tgui_input_number/tgui_static_data(mob/user) var/list/data = list() data["init_value"] = default // Default is a reserved keyword - data["large_buttons"] = usr.client.prefs.tgui_large_buttons + data["large_buttons"] = user.client.prefs.tgui_large_buttons data["max_value"] = max_value data["message"] = message data["min_value"] = min_value - data["swapped_buttons"] = !usr.client.prefs.tgui_swapped_buttons + data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons data["title"] = title return data diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm index 0a1d317320..f115fdde63 100644 --- a/code/modules/tgui_input/text.dm +++ b/code/modules/tgui_input/text.dm @@ -116,12 +116,12 @@ /datum/tgui_input_text/tgui_static_data(mob/user) var/list/data = list() - data["large_buttons"] = usr.client.prefs.tgui_large_buttons + data["large_buttons"] = user.client.prefs.tgui_large_buttons data["max_length"] = max_length data["message"] = message data["multiline"] = multiline data["placeholder"] = default // Default is a reserved keyword - data["swapped_buttons"] = !usr.client.prefs.tgui_swapped_buttons + data["swapped_buttons"] = !user.client.prefs.tgui_swapped_buttons data["title"] = title data["prevent_enter"] = prevent_enter return data @@ -129,7 +129,7 @@ /datum/tgui_input_text/tgui_data(mob/user) var/list/data = list() if(timeout) - .["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) + data["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) return data /datum/tgui_input_text/tgui_act(action, list/params) diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm index 7520b41abb..0f5ef6a14b 100644 --- a/code/modules/vchat/vchat_client.dm +++ b/code/modules/vchat/vchat_client.dm @@ -316,7 +316,7 @@ GLOBAL_LIST_EMPTY(bicon_cache) // Cache of the tag results, not the icons if(use_class) class = "class='icon [A.icon_state] [custom_classes]'" - return "" + return "" //Checks if the message content is a valid to_chat message /proc/is_valid_tochat_message(message) diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm index d436198017..effd283c13 100644 --- a/code/modules/ventcrawl/ventcrawl.dm +++ b/code/modules/ventcrawl/ventcrawl.dm @@ -38,6 +38,15 @@ var/list/ventcrawl_machinery = list( if(buckled) to_chat(src, "You cannot ventcrawl while buckled!") return FALSE + if(restrict_vore_ventcrawl) + var/foundstuff = FALSE + for(var/obj/belly/B in vore_organs) + if(B.contents.len) + foundstuff = TRUE + break + if(foundstuff) + to_chat(src, "You cannot ventcrawl while full!") + return FALSE return ventcrawl_carry() /mob/living/Login() diff --git a/code/modules/virus2/biohazard destroyer.dm b/code/modules/virus2/biohazard destroyer.dm index eabb3f8c62..fe5bb7c853 100644 --- a/code/modules/virus2/biohazard destroyer.dm +++ b/code/modules/virus2/biohazard destroyer.dm @@ -17,4 +17,4 @@ I.loc = src.loc for(var/mob/O in hearers(src, null)) - O.show_message("[bicon(src)] The [src.name] beeps.", 2) \ No newline at end of file + O.show_message("\icon[src][bicon(src)] The [src.name] beeps.", 2) \ No newline at end of file diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm index 167a88296c..4fae221b5a 100644 --- a/code/modules/virus2/items_devices.dm +++ b/code/modules/virus2/items_devices.dm @@ -31,7 +31,7 @@ report("Antibodies detected: [antigens2string(C.antibodies)]", user) /obj/item/device/antibody_scanner/proc/report(var/text, mob/user as mob) - to_chat(user, "[bicon(src)] \The [src] beeps, \"[text]\"") + to_chat(user, "\icon[src][bicon(src)] \The [src] beeps, \"[text]\"") ///////////////VIRUS DISH/////////////// diff --git a/code/modules/vore/eating/belly_obj_ch.dm b/code/modules/vore/eating/belly_obj_ch.dm index e9eb8f1b45..519e47493c 100644 --- a/code/modules/vore/eating/belly_obj_ch.dm +++ b/code/modules/vore/eating/belly_obj_ch.dm @@ -74,6 +74,36 @@ "Cherry Jelly" ) + //CHOMP - vore sprites + var/vore_sprite_flags = DM_FLAG_VORESPRITE_BELLY + var/tmp/static/list/vore_sprite_flag_list= list( + "Normal belly sprite" = DM_FLAG_VORESPRITE_BELLY, + //"Tail adjustment" = DM_FLAG_VORESPRITE_TAIL, + //"Marking addition" = DM_FLAG_VORESPRITE_MARKING + ) + + var/affects_vore_sprites = TRUE + var/count_absorbed_prey_for_sprite = TRUE + var/resist_triggers_animation = TRUE + var/size_factor_for_sprite = 1 + var/belly_sprite_to_affect = "stomach" + var/datum/sprite_accessory/tail/tail_to_change_to = FALSE + var/tail_colouration = FALSE + var/tail_extra_overlay = FALSE + var/tail_extra_overlay2 = FALSE + //var/marking_to_add = NULL + //var/marking_color = NULL + + +/obj/belly/proc/GetFullnessFromBelly() + if(!affects_vore_sprites) + return 0 + var/belly_fullness = 0 + for(var/mob/living/M in src) + if(count_absorbed_prey_for_sprite || !M.absorbed) + belly_fullness += M.size_multiplier + belly_fullness *= size_factor_for_sprite + return belly_fullness ///////////////////// NUTRITION REAGENT PRODUCTION ///////////////// diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index e649c937e0..6297d002f5 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -16,6 +16,7 @@ desc = "It's a belly! You're in it!" // Flavor text description of inside sight/sound/smells/feels. var/vore_sound = "Gulp" // Sound when ingesting someone var/vore_verb = "ingest" // Verb for eating with this in messages + var/release_verb = "expels" // Verb for releasing something from a stomach var/human_prey_swallow_time = 100 // Time in deciseconds to swallow /mob/living/carbon/human var/nonhuman_prey_swallow_time = 30 // Time in deciseconds to swallow anything else var/nutrition_percent = 100 // Nutritional percentage per tick in digestion mode @@ -30,7 +31,7 @@ var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles. var/transferchance = 0 // % Chance of prey being trasnsfered, goes from 0-100% var/transferchance_secondary = 0 // % Chance of prey being transfered to transferchance_secondary, also goes 0-100% - var/save_digest_mode = TRUE // Whether this belly's digest mode persists across rounds + var/save_digest_mode = TRUE // Whether this belly's digest mode persists across rounds var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone. var/bulge_size = 0.25 // The minimum size the prey has to be in order to show up on examine. var/display_absorbed_examine = FALSE // Do we display absorption examine messages for this belly at all? @@ -50,6 +51,7 @@ var/emote_time = 60 // How long between stomach emotes at prey (in seconds) var/emote_active = TRUE // Are we even giving emotes out at all or not? var/next_emote = 0 // When we're supposed to print our next emote, as a world.time + var/selective_preference = DM_DIGEST // Which type of selective bellymode do we default to? // Generally just used by AI var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location @@ -62,7 +64,7 @@ //I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere. //Actual full digest modes - var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG) + var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_SELECT,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG) //Digest mode addon flags var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY) //Item related modes @@ -168,6 +170,7 @@ "absorbed_desc", "vore_sound", "vore_verb", + "release_verb", "human_prey_swallow_time", "nonhuman_prey_swallow_time", "emote_time", @@ -204,6 +207,7 @@ "emote_lists", "emote_time", "emote_active", + "selective_preference", "mode_flags", "item_digest_mode", "contaminates", @@ -241,6 +245,12 @@ "fullness4_messages", "fullness5_messages", "vorespawn_blacklist", + "vore_sprite_flags", + "affects_vore_sprites", + "count_absorbed_prey_for_sprite", + "resist_triggers_animation", + "size_factor_for_sprite", + "belly_sprite_to_affect", "autotransferchance", "autotransferwait", "autotransferlocation", @@ -320,6 +330,7 @@ if(can_taste && (taste = M.get_taste_message(FALSE))) to_chat(owner, "[M] tastes of [taste].") vore_fx(M) + owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. //Stop AI processing in bellies if(M.ai_holder) M.ai_holder.go_sleep() @@ -333,6 +344,7 @@ /obj/belly/Exited(atom/movable/thing, atom/OldLoc) . = ..() if(isliving(thing) && !isbelly(thing.loc)) + owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. var/mob/living/L = thing L.clear_fullscreen("belly") if(L.hud_used) @@ -401,7 +413,7 @@ //Print notifications/sound if necessary if(!silent && count) - owner.visible_message("[owner] expels everything from their [lowertext(name)]!") + owner.visible_message("[owner] [release_verb] everything from their [lowertext(name)]!") var/soundfile if(!fancy_vore) soundfile = classic_release_sounds[release_sound] @@ -471,7 +483,7 @@ if(istype(M, /mob/observer)) //CHOMPEdit silent = TRUE if(!silent) - owner.visible_message("[owner] expels [M] from their [lowertext(name)]!") + owner.visible_message("[owner] [release_verb] [M] from their [lowertext(name)]!") var/soundfile if(!fancy_vore) soundfile = classic_release_sounds[release_sound] @@ -743,6 +755,7 @@ else if(M.reagents) M.reagents.trans_to_holder(Pred.bloodstr, M.reagents.total_volume, 0.5, TRUE) + owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. //Incase they have the loop going, let's double check to stop it. M.stop_sound_channel(CHANNEL_PREYLOOP) // Delete the digested mob @@ -822,6 +835,7 @@ //Update owner owner.updateVRPanel() + owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(isanimal(owner)) owner.update_icon() @@ -856,6 +870,7 @@ //Update owner owner.updateVRPanel() + owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(isanimal(owner)) owner.update_icon() @@ -957,6 +972,11 @@ var/sound/struggle_snuggle var/sound/struggle_rustle = sound(get_sfx("rustle")) + //CHOMPEdit Start - vore sprites struggle animation + if((vore_sprite_flags & DM_FLAG_VORESPRITE_BELLY) && (owner.vore_capacity_ex[belly_sprite_to_affect] >= 1)) + owner.vs_animate(belly_sprite_to_affect) + //CHOMPEdit End + if(is_wet) if(!fancy_vore) struggle_snuggle = sound(get_sfx("classic_struggle_sounds")) @@ -1159,6 +1179,7 @@ dupe.absorbed_desc = absorbed_desc dupe.vore_sound = vore_sound dupe.vore_verb = vore_verb + dupe.release_verb = release_verb dupe.human_prey_swallow_time = human_prey_swallow_time dupe.nonhuman_prey_swallow_time = nonhuman_prey_swallow_time dupe.emote_time = emote_time @@ -1209,6 +1230,12 @@ dupe.reagent_transfer_verb = reagent_transfer_verb dupe.custom_max_volume = custom_max_volume dupe.vorespawn_blacklist = vorespawn_blacklist + dupe.vore_sprite_flags = vore_sprite_flags + dupe.affects_vore_sprites = affects_vore_sprites + dupe.count_absorbed_prey_for_sprite = count_absorbed_prey_for_sprite + dupe.resist_triggers_animation = resist_triggers_animation + dupe.size_factor_for_sprite = size_factor_for_sprite + dupe.belly_sprite_to_affect = belly_sprite_to_affect dupe.autotransferchance = autotransferchance dupe.autotransferwait = autotransferwait dupe.autotransferlocation = autotransferlocation @@ -1221,6 +1248,7 @@ dupe.egg_type = egg_type dupe.emote_time = emote_time dupe.emote_active = emote_active + dupe.selective_preference = selective_preference dupe.save_digest_mode = save_digest_mode //// Object-holding variables diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index 829fb0309e..f08da0fdca 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -79,9 +79,9 @@ GLOBAL_LIST_INIT(digest_modes, list()) B.digest_nutri_gain = offset*((B.nutrition_percent / 100)*0.5/(B.gen_cost*1.25)*(damage_gain)/difference) //for transfering nutrition value over to GenerateBellyReagents_digesting() B.GenerateBellyReagents_digesting() else - B.owner.adjust_nutrition(offset*(4.5 * (damage_gain) / difference)) //CHOMPedit end //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. + B.owner.adjust_nutrition(offset*(4.5 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()) //CHOMPedit end //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. else - B.owner.adjust_nutrition(4.5 * (damage_gain) / difference) + B.owner.adjust_nutrition((4.5 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()) if(L.stat != oldstat) return list("to_update" = TRUE) @@ -242,3 +242,41 @@ GLOBAL_LIST_INIT(digest_modes, list()) B.ownegg = null return list("to_update" = TRUE) return + +/datum/digest_mode/selective //unselectable, "smart" digestion mode for mobs only + id = DM_SELECT + + +/datum/digest_mode/selective/process_mob(obj/belly/B, mob/living/L) + var/datum/digest_mode/tempmode = GLOB.digest_modes[DM_HOLD] // Default to Hold in case of big oof fallback + //if not absorbed, see if they're food + switch(L.selective_preference) // First, we respect prey prefs + if(DM_DIGEST) + if(L.digestable) + tempmode = GLOB.digest_modes[DM_DIGEST] // They want to be digested and can be, Digest + else + tempmode = GLOB.digest_modes[DM_DRAIN] // They want to be digested but can't be! Drain. + if(DM_ABSORB) + if(L.absorbable) + tempmode = GLOB.digest_modes[DM_ABSORB] // They want to be absorbed and can be. Absorb. + else + tempmode = GLOB.digest_modes[DM_DRAIN] // They want to be absorbed but can't be! Drain. + if(DM_DRAIN) + tempmode = GLOB.digest_modes[DM_DRAIN] // They want to be drained. Drain. + if(DM_DEFAULT) + switch(B.selective_preference) // They don't actually care? Time for our own preference. + if(DM_DIGEST) + if(L.digestable) + tempmode = GLOB.digest_modes[DM_DIGEST] // We prefer digestion and they're digestible? Digest + else if(L.absorbable) + tempmode = GLOB.digest_modes[DM_ABSORB] // If not digestible, are they absorbable? Then absorb. + else + tempmode = GLOB.digest_modes[DM_DRAIN] // Otherwise drain. + if(DM_ABSORB) + if(L.absorbable) + tempmode = GLOB.digest_modes[DM_ABSORB] // We prefer absorption and they're absorbable? Absorb. + else if(L.digestable) + tempmode = GLOB.digest_modes[DM_DIGEST] // If not absorbable, are they digestible? Then digest. + else + tempmode = GLOB.digest_modes[DM_DRAIN] // Otherwise drain. + return tempmode.process_mob(B, L) \ No newline at end of file diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index b3cdbabaf7..fa91e590aa 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -139,7 +139,7 @@ if(emote_active) var/list/EL = emote_lists[digest_mode] - if((LAZYLEN(EL) || LAZYLEN(emote_lists[DM_HOLD_ABSORBED]) || (digest_mode == DM_DIGEST && LAZYLEN(emote_lists[DM_HOLD]))) && next_emote <= world.time) + if((LAZYLEN(EL) || LAZYLEN(emote_lists[DM_HOLD_ABSORBED]) || (digest_mode == DM_DIGEST && LAZYLEN(emote_lists[DM_HOLD])) || (digest_mode == DM_SELECT && (LAZYLEN(emote_lists[DM_HOLD])||LAZYLEN(emote_lists[DM_DIGEST])||LAZYLEN(emote_lists[DM_ABSORB])) )) && next_emote <= world.time) var/living_count = 0 var/absorbed_count = 0 for(var/mob/living/L in contents) @@ -160,7 +160,14 @@ if(formatted_message) to_chat(M, "[formatted_message]") else - if(digest_mode == DM_DIGEST && !M.digestable) + if (digest_mode == DM_SELECT) + if (M.digestable) + EL = emote_lists[DM_DIGEST] + else if (M.absorbable) + EL = emote_lists[DM_ABSORB] + else + EL = emote_lists[DM_HOLD] + else if(digest_mode == DM_DIGEST && !M.digestable) EL = emote_lists[DM_HOLD] // Use Hold's emote list if we're indigestible var/raw_message = pick(EL) @@ -320,7 +327,9 @@ if(M.ckey) GLOB.prey_digested_roundstat++ - + + var/personal_nutrition_modifier = M.get_digestion_nutrition_modifier() + if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains) handle_remains_leaving(M) digestion_death(M) @@ -329,16 +338,16 @@ if(isrobot(owner)) var/mob/living/silicon/robot/R = owner if(reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && reagents.total_volume < reagents.maximum_volume) //CHOMPedit: digestion producing reagents - R.cell.charge += (nutrition_percent / 100) * compensation * 15 + R.cell.charge += (nutrition_percent / 100) * compensation * 15 * personal_nutrition_modifier GenerateBellyReagents_digested() else - R.cell.charge += (nutrition_percent / 100) * compensation * 25 + R.cell.charge += (nutrition_percent / 100) * compensation * 25 * personal_nutrition_modifier else if(reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && reagents.total_volume < reagents.maximum_volume) //CHOMP digestion producing reagents - owner.adjust_nutrition((nutrition_percent / 100) * compensation * 3) + owner.adjust_nutrition((nutrition_percent / 100) * compensation * 3 * personal_nutrition_modifier) GenerateBellyReagents_digested() else - owner.adjust_nutrition((nutrition_percent / 100) * compensation * 4.5) //CHOMPedit end + owner.adjust_nutrition((nutrition_percent / 100) * compensation * 4.5 * personal_nutrition_modifier) //CHOMPedit end /obj/belly/proc/steal_nutrition(mob/living/L) if(L.nutrition >= 100) diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index 1904661ef5..baca001d38 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -9,6 +9,9 @@ var/obj/item/device/pda/P = src if(P.id) P.id = null + + for(var/mob/living/voice/V in possessed_voice) // Delete voices. + V.Destroy() //Destroy the voice. for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion M.forceMove(item_storage) for(var/obj/item/O in contents) @@ -66,6 +69,8 @@ var/obj/item/device/pda/P = src if(P.id) P.id = null + for(var/mob/living/voice/V in possessed_voice) // Delete voices. + V.Destroy() //Destroy the voice. for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion M.forceMove(item_storage) for(var/obj/item/O in contents) @@ -122,7 +127,8 @@ icon = 'icons/obj/card_vr.dmi' icon_state = "[initial(icon_state)]_digested" else - sprite_stack += "digested" + if(!sprite_stack.Find("digested")) + sprite_stack += "digested" update_icon() return FALSE diff --git a/code/modules/vore/eating/living_ch.dm b/code/modules/vore/eating/living_ch.dm index 811f4db5ef..4f8ae74e2f 100644 --- a/code/modules/vore/eating/living_ch.dm +++ b/code/modules/vore/eating/living_ch.dm @@ -9,6 +9,32 @@ var/parasitic = FALSE //Digestion immunity and nutrition leeching variable + // CHOMP vore icons refactor (Now on living) + var/vore_capacity = 0 // Maximum capacity, -1 for unlimited + var/vore_capacity_ex = list("stomach" = 0) //expanded list of capacities + var/vore_fullness = 0 // How "full" the belly is (controls icons) + var/list/vore_fullness_ex = list("stomach" = 0) // Expanded list of fullness + var/vore_icons = 0 // Bitfield for which fields we have vore icons for. + var/vore_eyes = FALSE // For mobs with fullness specific eye overlays. + + var/list/vore_icon_bellies = list("stomach") + + +// Update fullness based on size & quantity of belly contents +/mob/living/proc/update_fullness() + var/list/new_fullness = list() + vore_fullness = 0 + for(var/belly_class in vore_icon_bellies) + new_fullness[belly_class] = 0 + for(var/obj/belly/B as anything in vore_organs) + new_fullness[B.belly_sprite_to_affect] += B.GetFullnessFromBelly() + for(var/belly_class in vore_icon_bellies) + new_fullness[belly_class] /= size_multiplier //Divided by pred's size so a macro mob won't get macro belly from a regular prey. + new_fullness[belly_class] = round(new_fullness[belly_class], 1) // Because intervals of 0.25 are going to make sprite artists cry. + vore_fullness_ex[belly_class] = min(vore_capacity_ex[belly_class], new_fullness[belly_class]) + vore_fullness += new_fullness[belly_class] + vore_fullness = min(vore_capacity, vore_fullness) + /mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T) if(vore_footstep_volume_cooldown++ >= 5) //updating the 'dominating' belly, the one that has most liquid and is loudest. diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 8716f6b510..9430154440 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -25,10 +25,13 @@ var/vore_taste = null // What the character tastes like var/vore_smell = null // What the character smells like var/no_vore = FALSE // If the character/mob can vore. + var/restrict_vore_ventcrawl = FALSE // Self explanatory var/noisy = FALSE // Toggle audible hunger. var/absorbing_prey = 0 // Determines if the person is using the succubus drain or not. See station_special_abilities_vr. var/drain_finalized = 0 // Determines if the succubus drain will be KO'd/absorbed. Can be toggled on at any time. var/fuzzy = 0 // Preference toggle for sharp/fuzzy icon. +// var/voice_freq = 0 // Preference for character voice frequency CHOMPEdit - Moved to modular_chomp/code/modules/mob/mob.dm +// var/list/voice_sounds_list = list() // The sound list containing our voice sounds! CHOMPEdit - Moved to modular_chomp/code/modules/mob/mob.dm var/permit_healbelly = TRUE var/stumble_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway var/slip_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway @@ -44,6 +47,7 @@ var/latejoin_vore = FALSE //CHOMPedit: If enabled, latejoiners can spawn into this, assuming they have a client var/latejoin_prey = FALSE //CHOMPedit: If enabled, latejoiners can spawn ontop of and instantly eat the victim var/noisy_full = FALSE //CHOMPedit: Enables belching when a mob has overeaten + var/selective_preference = DM_DEFAULT // Preference for selective bellymode var/regen_sounds = list( 'sound/effects/mob_effects/xenochimera/regen_1.ogg', 'sound/effects/mob_effects/xenochimera/regen_2.ogg', @@ -54,8 +58,8 @@ var/nutrition_message_visible = TRUE var/list/nutrition_messages = list( - "They are starving! You can hear their stomach snarling from across the room!" = 1, - "They are extremely hungry. A deep growl occasionally rumbles from their empty stomach." = 2, + "They are starving! You can hear their stomach snarling from across the room!", + "They are extremely hungry. A deep growl occasionally rumbles from their empty stomach.", "", "They have a stuffed belly, bloated fat and round from eating too much.", "They have a rotund, thick gut. It bulges from their body obscenely, close to sagging under its own weight.", @@ -263,6 +267,7 @@ P.vore_smell = src.vore_smell P.permit_healbelly = src.permit_healbelly P.noisy = src.noisy + P.selective_preference = src.selective_preference P.show_vore_fx = src.show_vore_fx P.can_be_drop_prey = src.can_be_drop_prey P.can_be_drop_pred = src.can_be_drop_pred @@ -313,6 +318,7 @@ vore_taste = P.vore_taste vore_smell = P.vore_smell permit_healbelly = P.permit_healbelly + selective_preference = P.selective_preference noisy = P.noisy show_vore_fx = P.show_vore_fx can_be_drop_prey = P.can_be_drop_prey @@ -324,7 +330,7 @@ drop_vore = P.drop_vore slip_vore = P.slip_vore stumble_vore = P.stumble_vore - + nutrition_message_visible = P.nutrition_message_visible nutrition_messages = P.nutrition_messages weight_message_visible = P.weight_message_visible @@ -493,6 +499,7 @@ SA.prey_excludes[src] = world.time log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [key_name(B.owner)] ([B.owner ? "JMP" : "null"])") + B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(!ishuman(B.owner)) B.owner.update_icons() @@ -521,6 +528,24 @@ crystal.bound_mob = null crystal.bound_mob = capture_crystal = 0 log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [crystal] owned by [crystal.owner]. [ADMIN_FLW(src)]") + + //You've been turned into an item! + else if(tf_mob_holder && istype(src, /mob/living/voice) && istype(src.loc, /obj/item)) + var/obj/item/item_to_destroy = src.loc //If so, let's destroy the item they just TF'd out of. + if(istype(src.loc, /obj/item/clothing)) //Are they in clothes? Delete the item then revert them. + qdel(item_to_destroy) + log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into an object.") + revert_mob_tf() + else //Are they in any other type of object? If qdel is done first, the mob is deleted from the world. + forceMove(get_turf(src)) + qdel(item_to_destroy) + log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into an object.") + revert_mob_tf() + + //You've been turned into a mob! + else if(tf_mob_holder) + log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into another mob.") + revert_mob_tf() //Don't appear to be in a vore situation else to_chat(src,"You aren't inside anyone, though, is the thing.") @@ -712,6 +737,12 @@ if(new_color) glow_color = new_color +/obj/item + var/trash_eatable = TRUE + +/mob/living/proc/get_digestion_nutrition_modifier() + return 1 + /mob/living/proc/eat_trash() set name = "Eat Trash" set category = "Abilities" @@ -730,6 +761,10 @@ to_chat(src, "You are not allowed to eat this.") return + if(!I.trash_eatable) + to_chat(src, "You can't eat that so casually!") + return + if(istype(I, /obj/item/device/paicard)) var/obj/item/device/paicard/palcard = I var/mob/living/silicon/pai/pocketpal = palcard.pai @@ -796,7 +831,7 @@ to_chat(src, "You can taste the flavor of aromatic rolling paper and funny looks.") else if(istype(I,/obj/item/weapon/paper)) to_chat(src, "You can taste the dry flavor of bureaucracy.") - else if(istype(I,/obj/item/weapon/dice)) + else if(istype(I,/obj/item/weapon/dice)) //CHOMPedit: Removed roulette ball because that's not active here. to_chat(src, "You can taste the bitter flavor of cheating.") else if(istype(I,/obj/item/weapon/lipstick)) to_chat(src, "You can taste the flavor of couture and style. Toddler at the make-up bag style.") @@ -1023,6 +1058,7 @@ dispvoreprefs += "Leaves Remains: [digest_leave_remains ? "Enabled" : "Disabled"]
    " dispvoreprefs += "Mob Vore: [allowmobvore ? "Enabled" : "Disabled"]
    " dispvoreprefs += "Healbelly permission: [permit_healbelly ? "Allowed" : "Disallowed"]
    " + dispvoreprefs += "Selective Mode Pref: [src.selective_preference]
    " dispvoreprefs += "Spontaneous vore prey: [can_be_drop_prey ? "Enabled" : "Disabled"]
    " dispvoreprefs += "Spontaneous vore pred: [can_be_drop_pred ? "Enabled" : "Disabled"]
    " dispvoreprefs += "Late join spawn point belly: [latejoin_vore ? "Enabled" : "Disabled"]
    " //CHOMPstation edit @@ -1057,6 +1093,7 @@ to_chat(src, "Belly desc: [B.desc]") to_chat(src, "Belly absorbed desc: [B.absorbed_desc]") to_chat(src, "Vore verb: [B.vore_verb]") + to_chat(src, "Release verb: [B.release_verb]") to_chat(src, "Struggle messages (outside):") for(var/msg in B.struggle_messages_outside) to_chat(src, "[msg]") diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 72b4349096..7089e4f896 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -77,11 +77,13 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/vore_taste = "nothing in particular" var/vore_smell = "nothing in particular" + var/selective_preference = DM_DEFAULT + var/nutrition_message_visible = TRUE var/list/nutrition_messages = list( - "They are starving! You can hear their stomach snarling from across the room!" = 1, - "They are extremely hungry. A deep growl occasionally rumbles from their empty stomach." = 2, + "They are starving! You can hear their stomach snarling from across the room!", + "They are extremely hungry. A deep growl occasionally rumbles from their empty stomach.", "", "They have a stuffed belly, bloated fat and round from eating too much.", "They have a rotund, thick gut. It bulges from their body obscenely, close to sagging under its own weight.", @@ -180,6 +182,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE vore_smell = json_from_file["vore_smell"] permit_healbelly = json_from_file["permit_healbelly"] noisy = json_from_file["noisy"] + selective_preference = json_from_file["selective_preference"] show_vore_fx = json_from_file["show_vore_fx"] can_be_drop_prey = json_from_file["can_be_drop_prey"] can_be_drop_pred = json_from_file["can_be_drop_pred"] @@ -221,6 +224,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE allowmobvore = TRUE if(isnull(permit_healbelly)) permit_healbelly = TRUE + if(isnull(selective_preference)) + selective_preference = DM_DEFAULT if (isnull(noisy)) noisy = FALSE if(isnull(show_vore_fx)) @@ -304,6 +309,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "vore_smell" = vore_smell, "permit_healbelly" = permit_healbelly, "noisy" = noisy, + "selective_preference" = selective_preference, "show_vore_fx" = show_vore_fx, "can_be_drop_prey" = can_be_drop_prey, "can_be_drop_pred" = can_be_drop_pred, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 830145562c..96bd26fec5 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -173,6 +173,7 @@ "mode" = selected.digest_mode, "item_mode" = selected.item_digest_mode, "verb" = selected.vore_verb, + "release_verb" = selected.release_verb, "desc" = selected.desc, "absorbed_desc" = selected.absorbed_desc, "fancy" = selected.fancy_vore, @@ -191,13 +192,28 @@ "shrink_grow_size" = selected.shrink_grow_size, "emote_time" = selected.emote_time, "emote_active" = selected.emote_active, + "selective_preference" = selected.selective_preference, "nutrition_ex" = host.nutrition_message_visible, "weight_ex" = host.weight_message_visible, "belly_fullscreen" = selected.belly_fullscreen, "belly_fullscreen_color" = selected.belly_fullscreen_color, //CHOMPEdit "mapRef" = map_name, //CHOMPEdit - "vorespawn_blacklist" = selected.vorespawn_blacklist - ) //CHOMP Addition: vorespawn blacklist + "vorespawn_blacklist" = selected.vorespawn_blacklist, //CHOMP Addition: vorespawn blacklist + //CHOMP add: vore sprite options + "affects_voresprite" = selected.affects_vore_sprites, + "absorbed_voresprite" = selected.count_absorbed_prey_for_sprite, + "resist_animation" = selected.resist_triggers_animation, + "voresprite_size_factor" = selected.size_factor_for_sprite, + "belly_sprite_to_affect" = selected.belly_sprite_to_affect, + "belly_sprite_option_shown" = LAZYLEN(host.vore_icon_bellies) > 1 ? TRUE : FALSE, + "tail_option_shown" = istype(host, /mob/living/carbon/human), + "tail_to_change_to" = selected.tail_to_change_to, + "tail_colouration" = selected.tail_colouration, + "tail_extra_overlay" = selected.tail_extra_overlay, + "tail_extra_overlay2" = selected.tail_extra_overlay2 + //"marking_to_add" = selected.marking_to_add + //CHOMPEdit end + ) var/list/addons = list() for(var/flag_name in selected.mode_flag_list) @@ -205,6 +221,14 @@ addons.Add(flag_name) selected_list["addons"] = addons + //CHOMPEdit voresprite flags + var/list/vs_flags = list() + for(var/flag_name in selected.vore_sprite_flag_list) + if(selected.vore_sprite_flags & selected.vore_sprite_flag_list[flag_name]) + vs_flags.Add(flag_name) + selected_list["vore_sprite_flags"] = vs_flags + //CHOMPEdit END + selected_list["egg_type"] = selected.egg_type selected_list["contaminates"] = selected.contaminates selected_list["contaminate_flavor"] = null @@ -586,6 +610,22 @@ host.stumble_vore = !host.stumble_vore unsaved_changes = TRUE return TRUE + if("switch_selective_mode_pref") + host.selective_preference = tgui_input_list(usr, "What would you prefer happen to you with selective bellymode?","Selective Bellymode", list(DM_DEFAULT, DM_DIGEST, DM_ABSORB, DM_DRAIN)) + if(!(host.selective_preference)) + host.selective_preference = DM_DEFAULT + if(host.client.prefs_vr) + host.client.prefs_vr.selective_preference = host.selective_preference + unsaved_changes = TRUE + return TRUE + if("toggle_nutrition_ex") + host.nutrition_message_visible = !host.nutrition_message_visible + unsaved_changes = TRUE + return TRUE + if("toggle_weight_ex") + host.weight_message_visible = !host.weight_message_visible + unsaved_changes = TRUE + return TRUE /datum/vore_look/proc/pick_from_inside(mob/user, params) var/atom/movable/target = locate(params["pick"]) @@ -671,7 +711,7 @@ //Handle the [All] choice. Ugh inelegant. Someone make this pretty. if(params["pickall"]) - intent = tgui_alert(usr, "Eject all, Move all?","Query",list("Eject all","Cancel","Move all")) + intent = tgui_alert(user, "Eject all, Move all?","Query",list("Eject all","Cancel","Move all")) switch(intent) if("Cancel") return TRUE @@ -689,7 +729,7 @@ to_chat(user,"You can't do that in your state!") return TRUE - var/obj/belly/choice = tgui_input_list(usr, "Move all where?","Select Belly", host.vore_organs) + var/obj/belly/choice = tgui_input_list(user, "Move all where?","Select Belly", host.vore_organs) if(!choice) return FALSE @@ -702,10 +742,10 @@ var/atom/movable/target = locate(params["pick"]) if(!(target in host.vore_selected)) return TRUE // Not in our X anymore, update UI - var/list/available_options = list("Examine", "Eject", "Move") + var/list/available_options = list("Examine", "Eject", "Move", "Transfer") if(ishuman(target)) available_options += "Transform" - intent = tgui_alert(user, "What would you like to do with [target]?", "Vore Pick", available_options, strict_byond = TRUE) + intent = tgui_input_list(user, "What would you like to do with [target]?", "Vore Pick", available_options) switch(intent) if("Examine") var/list/results = target.examine(host) @@ -726,13 +766,51 @@ if(host.stat) to_chat(user,"You can't do that in your state!") return TRUE - var/obj/belly/choice = tgui_input_list(usr, "Move [target] where?","Select Belly", host.vore_organs) if(!choice || !(target in host.vore_selected)) return TRUE - to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!") host.vore_selected.transfer_contents(target, choice) + + + if("Transfer") + if(host.stat) + to_chat(user,"You can't do that in your state!") + return TRUE + + var/mob/living/belly_owner = host + + var/list/viable_candidates = list() + for(var/mob/living/candidate in range(1, host)) + if(istype(candidate) && !(candidate == host)) + if(candidate.vore_organs.len && candidate.feeding && !candidate.no_vore) + viable_candidates += candidate + if(!viable_candidates.len) + to_chat(user, "There are no viable candidates around you!") + return TRUE + belly_owner = tgui_input_list(user, "Who do you want to recieve the target?", "Select Predator", viable_candidates) + + if(!belly_owner || !(belly_owner in range(1, host))) + return TRUE + + var/obj/belly/choice = tgui_input_list(user, "Move [target] where?","Select Belly", belly_owner.vore_organs) + if(!choice || !(target in host.vore_selected) || !belly_owner || !(belly_owner in range(1, host))) + return TRUE + + if(belly_owner != host) + to_chat(user, "Transfer offer sent. Await their response.") + var/accepted = tgui_alert(belly_owner, "[host] is trying to transfer [target] from their [lowertext(host.vore_selected.name)] into your [lowertext(choice.name)]. Do you accept?", "Feeding Offer", list("Yes", "No")) + if(accepted != "Yes") + to_chat(user, "[belly_owner] refused the transfer!!") + return TRUE + if(!belly_owner || !(belly_owner in range(1, host))) + return TRUE + to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to [belly_owner]'s [lowertext(choice.name)]!") + to_chat(belly_owner,"[target] is squished from [host]'s [lowertext(host.vore_selected.name)] to your [lowertext(choice.name)]!") + host.vore_selected.transfer_contents(target, choice) + else + to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!") + host.vore_selected.transfer_contents(target, choice) return TRUE if("Transform") @@ -857,62 +935,62 @@ var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. '%count' will be replaced with the number of anything in your belly. '%countprey' will be replaced with the number of living prey in your belly." switch(params["msgtype"]) if("dmp") - var/new_message = tgui_input_text(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",host.vore_selected.get_messages("dmp"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they expire. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Digest Message (to prey)",host.vore_selected.get_messages("dmp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"dmp") if("dmo") - var/new_message = tgui_input_text(user,"These are sent to you when prey expires in you. Write them in 2nd person ('you feel X'). Avoid using %pred in this type."+help,"Digest Message (to you)",host.vore_selected.get_messages("dmo"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey expires in you. Write them in 2nd person ('you feel X'). Avoid using %pred in this type."+help,"Digest Message (to you)",host.vore_selected.get_messages("dmo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"dmo") if("amp") - var/new_message = tgui_input_text(user,"These are sent to prey when their absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to prey)",host.vore_selected.get_messages("amp"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to prey)",host.vore_selected.get_messages("amp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"amp") if("amo") - var/new_message = tgui_input_text(user,"These are sent to you when prey's absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to you)",host.vore_selected.get_messages("amo"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's absorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to you)",host.vore_selected.get_messages("amo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"amo") if("uamp") - var/new_message = tgui_input_text(user,"These are sent to prey when their unnabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to prey)",host.vore_selected.get_messages("uamp"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when their unnabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to prey)",host.vore_selected.get_messages("uamp"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"uamp") if("uamo") - var/new_message = tgui_input_text(user,"These are sent to you when prey's unabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to you)",host.vore_selected.get_messages("uamo"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to you when prey's unabsorption finishes. Write them in 2nd person ('you feel X'). Avoid using %pred in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Digest Message (to you)",host.vore_selected.get_messages("uamo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"uamo") if("smo") - var/new_message = tgui_input_text(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",host.vore_selected.get_messages("smo"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when prey struggles. Write them in 3rd person ('X's Y bulges')."+help,"Struggle Message (outside)",host.vore_selected.get_messages("smo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"smo") if("smi") - var/new_message = tgui_input_text(user,"These are sent to prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Struggle Message (inside)",host.vore_selected.get_messages("smi"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type."+help,"Struggle Message (inside)",host.vore_selected.get_messages("smi"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"smi") if("asmo") - var/new_message = tgui_input_text(user,"These are sent to those nearby when absorbed prey struggles. Write them in 3rd person ('X's Y bulges'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Struggle Message (outside)",host.vore_selected.get_messages("asmo"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to those nearby when absorbed prey struggles. Write them in 3rd person ('X's Y bulges'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Struggle Message (outside)",host.vore_selected.get_messages("asmo"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"asmo") if("asmi") - var/new_message = tgui_input_text(user,"These are sent to absorbed prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Struggle Message (inside)",host.vore_selected.get_messages("asmi"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to absorbed prey when they struggle. Write them in 2nd person ('you feel X'). Avoid using %prey in this type. %count will not work for this type, and %countprey will only count absorbed victims."+help,"Struggle Message (inside)",host.vore_selected.get_messages("asmi"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"asmi") if("em") - var/new_message = tgui_input_text(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",host.vore_selected.get_messages("em"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",host.vore_selected.get_messages("em"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"em") if("ema") - var/new_message = tgui_input_text(user,"These are sent to people who examine you when this belly has absorbed victims. Write them in 3rd person ('Their %belly is larger'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Examine Message (with absorbed victims)",host.vore_selected.get_messages("ema"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to people who examine you when this belly has absorbed victims. Write them in 3rd person ('Their %belly is larger'). %count will not work for this type, and %countprey will only count absorbed victims."+help,"Examine Message (with absorbed victims)",host.vore_selected.get_messages("ema"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"ema") @@ -925,7 +1003,7 @@ if("Clear") host.nutrition_messages[index] = "" if("Edit") - var/new_message = tgui_input_text(user, "Input a message", "Input", host.nutrition_messages[index], multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user, "Input a message", "Input", host.nutrition_messages[index], multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.nutrition_messages[index] = new_message @@ -938,62 +1016,62 @@ if("Clear") host.weight_messages[index] = "" if("Edit") - var/new_message = tgui_input_text(user, "Input a message", "Input", host.weight_messages[index], multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user, "Input a message", "Input", host.weight_messages[index], multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.weight_messages[index] = new_message if("im_digest") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Digest mode. Write them in 2nd person ('%pred's %belly squishes down on you.')."+help,"Idle Message (Digest)",host.vore_selected.get_messages("im_digest"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Digest mode. Write them in 2nd person ('%pred's %belly squishes down on you.')."+help,"Idle Message (Digest)",host.vore_selected.get_messages("im_digest"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_digest") if("im_hold") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Hold mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Hold)",host.vore_selected.get_messages("im_hold"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Hold mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Hold)",host.vore_selected.get_messages("im_hold"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_hold") if("im_holdabsorbed") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are absorbed. Write them in 2nd person ('%pred's %belly squishes down on you.') %count will not work for this type, and %countprey will only count absorbed victims."+help,"Idle Message (Hold Absorbed)",host.vore_selected.get_messages("im_holdabsorbed"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are absorbed. Write them in 2nd person ('%pred's %belly squishes down on you.') %count will not work for this type, and %countprey will only count absorbed victims."+help,"Idle Message (Hold Absorbed)",host.vore_selected.get_messages("im_holdabsorbed"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_holdabsorbed") if("im_absorb") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Absorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Absorb)",host.vore_selected.get_messages("im_absorb"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Absorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Absorb)",host.vore_selected.get_messages("im_absorb"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_absorb") if("im_heal") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Heal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Heal)",host.vore_selected.get_messages("im_heal"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Heal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Heal)",host.vore_selected.get_messages("im_heal"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_heal") if("im_drain") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Drain mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Drain)",host.vore_selected.get_messages("im_drain"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Drain mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Drain)",host.vore_selected.get_messages("im_drain"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_drain") if("im_steal") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Size Steal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Size Steal)",host.vore_selected.get_messages("im_steal"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Size Steal mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Size Steal)",host.vore_selected.get_messages("im_steal"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_steal") if("im_egg") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Encase In Egg mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Encase In Egg)",host.vore_selected.get_messages("im_egg"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Encase In Egg mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Encase In Egg)",host.vore_selected.get_messages("im_egg"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_egg") if("im_shrink") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Shrink mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Shrink)",host.vore_selected.get_messages("im_shrink"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Shrink mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Shrink)",host.vore_selected.get_messages("im_shrink"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_shrink") if("im_grow") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Grow mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Grow)",host.vore_selected.get_messages("im_grow"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Grow mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Grow)",host.vore_selected.get_messages("im_grow"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_grow") if("im_unabsorb") - var/new_message = tgui_input_text(user,"These are sent to prey every minute when you are on Unabsorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Unabsorb)",host.vore_selected.get_messages("im_unabsorb"), multiline = TRUE, prevent_enter = TRUE) + var/new_message = sanitize(tgui_input_text(user,"These are sent to prey every minute when you are on Unabsorb mode. Write them in 2nd person ('%pred's %belly squishes down on you.')"+help,"Idle Message (Unabsorb)",host.vore_selected.get_messages("im_unabsorb"), multiline = TRUE, prevent_enter = TRUE),MAX_MESSAGE_LEN,0,0,0) if(new_message) host.vore_selected.set_messages(new_message,"im_unabsorb") @@ -1023,6 +1101,15 @@ host.vore_selected.vore_verb = new_verb . = TRUE + if("b_release_verb") + var/new_release_verb = html_encode(tgui_input_text(usr,"New verb when releasing from stomach (e.g. expels or coughs or drops):","New Release Verb")) + + if(length(new_release_verb) > BELLIES_NAME_MAX || length(new_release_verb) < BELLIES_NAME_MIN) + tgui_alert_async(usr, "Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error") + return FALSE + + host.vore_selected.release_verb = new_release_verb + . = TRUE if("b_fancy_sound") host.vore_selected.fancy_vore = !host.vore_selected.fancy_vore host.vore_selected.vore_sound = "Gulp" @@ -1076,7 +1163,7 @@ host.vore_selected.can_taste = !host.vore_selected.can_taste . = TRUE if("b_bulge_size") - var/new_bulge = tgui_input_number(user, "Choose the required size prey must be to show up on examine, ranging from 25% to 200% Set this to 0 for no text on examine.", "Set Belly Examine Size.", max_value = 200, min_value = 25) + var/new_bulge = tgui_input_number(user, "Choose the required size prey must be to show up on examine, ranging from 25% to 200% Set this to 0 for no text on examine.", "Set Belly Examine Size.", max_value = 200, min_value = 0) if(new_bulge == null) return FALSE if(new_bulge == 0) //Disable. @@ -1132,8 +1219,14 @@ if("b_emoteactive") host.vore_selected.emote_active = !host.vore_selected.emote_active . = TRUE + if("b_selective_mode_pref_toggle") + if(host.vore_selected.selective_preference == DM_DIGEST) + host.vore_selected.selective_preference = DM_ABSORB + else + host.vore_selected.selective_preference = DM_DIGEST + . = TRUE if("b_emotetime") - var/new_time = tgui_input_number(user, "Choose the period it takes for idle belly emotes to be shown to prey. Measured in seconds, Minimum 1 minute, Maximum 10 minutes.", "Set Belly Emote Delay.", host.vore_selected.digest_brute, 10, 1) + var/new_time = tgui_input_number(user, "Choose the period it takes for idle belly emotes to be shown to prey. Measured in seconds, Minimum 1 minute, Maximum 10 minutes.", "Set Belly Emote Delay.", host.vore_selected.digest_brute, 600, 60) if(new_time == null) return FALSE var/new_new_time = CLAMP(new_time, 60, 600) @@ -1247,12 +1340,6 @@ if("b_save_digest_mode") host.vore_selected.save_digest_mode = !host.vore_selected.save_digest_mode . = TRUE - if("toggle_nutrition_ex") - host.nutrition_message_visible = !host.nutrition_message_visible - . = TRUE - if("toggle_weight_ex") - host.weight_message_visible = !host.weight_message_visible - . = TRUE if("b_del") var/alert = tgui_alert(usr, "Are you sure you want to delete your [lowertext(host.vore_selected.name)]?","Confirmation",list("Cancel","Delete")) if(!(alert == "Delete")) @@ -1288,6 +1375,63 @@ if("b_vorespawn_blacklist") //CHOMP Addition host.vore_selected.vorespawn_blacklist = !host.vore_selected.vorespawn_blacklist . = TRUE + if("b_belly_sprite_to_affect") //CHOMP Addition + var/belly_choice = tgui_input_list(usr, "Which belly sprite do you want your [lowertext(host.vore_selected.name)] to affect?","Select Region", host.vore_icon_bellies) + if(!belly_choice) //They cancelled, no changes + return FALSE + else + host.vore_selected.belly_sprite_to_affect = belly_choice + host.update_fullness() + . = TRUE + if("b_vore_sprite_flags") //CHOMP Addition + var/list/menu_list = host.vore_selected.vore_sprite_flag_list.Copy() + var/toggle_vs_flag = tgui_input_list(usr, "Toggle Vore Sprite Modes", "Mode Choice", menu_list) + if(!toggle_vs_flag) + return FALSE + host.vore_selected.vore_sprite_flags ^= host.vore_selected.vore_sprite_flag_list[toggle_vs_flag] + . = TRUE + if("b_affects_vore_sprites") //CHOMP Addition + host.vore_selected.affects_vore_sprites = !host.vore_selected.affects_vore_sprites + host.update_fullness() + . = TRUE + if("b_count_absorbed_prey_for_sprites") //CHOMP Addition + host.vore_selected.count_absorbed_prey_for_sprite = !host.vore_selected.count_absorbed_prey_for_sprite + host.update_fullness() + . = TRUE + if("b_resist_animation") //CHOMP Addition + host.vore_selected.resist_triggers_animation = !host.vore_selected.resist_triggers_animation + . = TRUE + if("b_size_factor_sprites") //CHOMP Addition + var/size_factor_input = input(user, "Set the impact prey's size have on your vore sprite. 1 means no scaling, 0.5 means prey count half as much, 2 means prey count double. (Range from 0.1 - 3)", "Size Factor") as num|null + if(!isnull(size_factor_input)) + host.vore_selected.size_factor_for_sprite = CLAMP(size_factor_input, 0.1, 3) + host.update_fullness() + . = TRUE + if("b_tail_to_change_to") //CHOMP Addition + var/tail_choice = tgui_input_list(usr, "Which tail sprite do you want to use when your [lowertext(host.vore_selected.name)] is filled?","Select Sprite", global.tail_styles_list) + if(!tail_choice) //They cancelled, no changes + return FALSE + else + host.vore_selected.tail_to_change_to = tail_choice + . = TRUE + if("b_tail_color") // CHOMP Addition + var/newcolor = input(usr, "Choose tail color.", "", host.vore_selected.tail_colouration) as color|null + if(newcolor) + host.vore_selected.tail_colouration = newcolor + update_preview_icon() + . = TRUE + if("b_tail_color2") // CHOMP Addition + var/newcolor = input(usr, "Choose tail secondary color.", "", host.vore_selected.tail_extra_overlay) as color|null + if(newcolor) + host.vore_selected.tail_extra_overlay = newcolor + update_preview_icon() + . = TRUE + if("b_tail_color3") // CHOMP Addition + var/newcolor = input(usr, "Choose tail tertiary color.", "", host.vore_selected.tail_extra_overlay2) as color|null + if(newcolor) + host.vore_selected.tail_extra_overlay2 = newcolor + update_preview_icon() + . = TRUE if(.) unsaved_changes = TRUE diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index c220e68676..471d992c40 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -2098,14 +2098,14 @@ Departamental Swimsuits, for general use translocator_unequip(translocator, user) T.forceMove(src) translocator = T - user.show_message("[bicon(src)]*click!*") + user.show_message("\icon[src][bicon(src)]*click!*") playsound(src, 'sound/machines/click.ogg', 30, 1) /obj/item/clothing/head/fluff/nikki/proc/translocator_unequip(var/obj/item/device/perfect_tele/T, var/mob/living/carbon/human/user) if (translocator) if (user) user.put_in_hands(T) - user.show_message("[bicon(src)]*click!*") + user.show_message("\icon[src][bicon(src)]*click!*") else translocator.forceMove(get_turf(src)) translocator = null @@ -2456,4 +2456,26 @@ Departamental Swimsuits, for general use icon = 'icons/vore/custom_clothes_vr.dmi' icon_override = 'icons/vore/custom_onmob_vr.dmi' +//Pandora029:Seona Young +/obj/item/clothing/under/fluff/foxoflightsuit + name = "padded flightsui" + desc = "A ruddy-orange combination immersion-and-flight suit, fitted with extra padding across the front of its legs. Warm, waterproof and practical, seveal patches are scattered across it alongside a hard-wearing harness." + + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_state = "foxflightsuit" + worn_state = "foxflightsuit_mob" + rolled_sleeves = 0 + rolled_down = 0 + + icon_override = 'icons/vore/custom_clothes_vr.dmi' + item_state = "foxflightsuit_mob" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + +//Shalax: Cerise Duelliste +/obj/item/weapon/storage/belt/security/fluff/cerise + name = "champion's belt" + desc = "Cerise's hard-won belt from her glory days. Her skill might have waned since then, but her renown lives on." + icon_state = "champion" + item_state = null // i swear to god this works - hatterhat + End CHOMP Removal*/ diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 9379d654ca..cdbf8dc582 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -345,17 +345,24 @@ icon = 'icons/vore/custom_items_vr.dmi' icon_override = 'icons/vore/custom_items_vr.dmi' -//zodiacshadow: ? +//zodiacshadow: Nehi Maximus /obj/item/device/radio/headset/fluff/zodiacshadow name = "Nehi's 'phones" desc = "A pair of old-fashioned purple headphones for listening to music that also double as an NT-approved headset; they connect nicely to any standard PDA. One side is engraved with the letters NEHI, the other having an elaborate inscription of the words \"My voice is my weapon of choice\" in a fancy font. A modern polymer allows switching between modes to either allow one to hear one's surroundings or to completely block them out." icon = 'icons/vore/custom_items_vr.dmi' - icon_state = "headphones" + icon_state = "nehiphones" - icon_override = 'icons/vore/custom_items_vr.dmi' - item_state = "headphones_mob" + icon_override = 'icons/vore/custom_onmob_vr.dmi' + item_state = "nehiphones" +//zodiacshadow: Nehi Maximus +/obj/item/clothing/accessory/medal/silver/fluff/zodiacshadow + name = "Health Service Achievement medal" + desc = "A small silver medal with the inscription \"For going above and beyond in the field.\" on it, along with the name Nehi Maximus." + + icon = 'icons/inventory/accessory/item.dmi' + icon_state = "silver" // OrbisA: Richard D'angelo /obj/item/weapon/melee/fluff/holochain diff --git a/code/modules/vore/mouseray.dm b/code/modules/vore/mouseray.dm new file mode 100644 index 0000000000..65f997ad1a --- /dev/null +++ b/code/modules/vore/mouseray.dm @@ -0,0 +1,515 @@ +/obj/item/weapon/gun/energy/mouseray + name = "mouse ray" + desc = "A mysterious looking ray gun..." + icon = 'icons/obj/mouseray.dmi' + icon_state = "mouseray" + item_state = "mouseray" + item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi') + fire_sound = 'sound/weapons/wave.ogg' + charge_cost = 240 + projectile_type = /obj/item/projectile/beam/mouselaser + origin_tech = list(TECH_BLUESPACE = 4) + battery_lock = 1 + firemodes = list() + var/tf_type = /mob/living/simple_mob/animal/passive/mouse //This type is what kind of mob it will try to turn people into! + var/cooldown = 0 //automatically set when used + var/cooldown_time = 15 SECONDS //the amount of time between shots + var/tf_admin_pref_override = FALSE //Overrides pref checks + var/tf_allow_select = FALSE //Toggles if the gun is able to pick between things in the 'tf_possible_types' variable + var/tf_possible_types = list( //The different types of mob the gun can pick between + "mouse" = /mob/living/simple_mob/animal/passive/mouse, + "rat" = /mob/living/simple_mob/animal/passive/mouse/rat, + "dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper + ) + +/obj/item/weapon/gun/energy/mouseray/attack_self(mob/user) + . = ..() + if(tf_allow_select) + pick_type() + +/obj/item/weapon/gun/energy/mouseray/proc/pick_type() + var/choice = tgui_input_list(usr, "Select a type to turn things into.", "[src.name]", tf_possible_types) + if(!choice) + return + tf_type = tf_possible_types[choice] + to_chat(usr, "You selected [choice].") + +/obj/item/weapon/gun/energy/mouseray/Fire(atom/target, mob/living/user, clickparams, pointblank, reflex) + if(world.time < cooldown) + to_chat(usr, "\The [src] isn't ready yet.") + return + . = ..() + +/obj/item/weapon/gun/energy/mouseray/Fire_userless(atom/target) + if(world.time < cooldown) + return + . = ..() + +/obj/item/weapon/gun/energy/mouseray/consume_next_projectile() + . = ..() + var/obj/item/projectile/beam/mouselaser/G = . + cooldown = world.time + cooldown_time + if(tf_type) + G.tf_type = tf_type + if(tf_admin_pref_override) + G.tf_admin_pref_override = tf_admin_pref_override + +/obj/item/weapon/gun/energy/mouseray/update_icon() + if(charge_meter) + var/ratio = power_supply.charge / power_supply.maxcharge + + //make sure that rounding down will not give us the empty state even if we have charge for a shot left. + if(power_supply.charge < charge_cost) + ratio = 0 + else + ratio = max(round(ratio, 0.25) * 100, 25) + + icon_state = "[initial(icon_state)][ratio]" + +/obj/item/projectile/beam/mouselaser + name = "metamorphosis beam" + icon_state = "xray" + nodamage = 1 + damage = 0 + range = 7 + check_armour = "laser" + var/tf_type = /mob/living/simple_mob/animal/passive/mouse + var/tf_admin_pref_override = FALSE + + muzzle_type = /obj/effect/projectile/muzzle/laser_omni + tracer_type = /obj/effect/projectile/tracer/laser_omni + impact_type = /obj/effect/projectile/impact/laser_omni + +/obj/item/projectile/beam/mouselaser/on_hit(var/atom/target) + var/mob/living/M = target + if(!istype(M)) + return + if(target != firer) //If you shot yourself, you probably want to be TFed so don't bother with prefs. + if(!M.allow_spontaneous_tf && !tf_admin_pref_override) + return + if(M.tf_mob_holder) + var/mob/living/ourmob = M.tf_mob_holder + if(ourmob.ai_holder) + var/datum/ai_holder/our_AI = ourmob.ai_holder + our_AI.set_stance(STANCE_IDLE) + M.tf_mob_holder = null + ourmob.ckey = M.ckey + var/turf/get_dat_turf = get_turf(target) + ourmob.loc = get_dat_turf + ourmob.forceMove(get_dat_turf) + ourmob.vore_selected = M.vore_selected + M.vore_selected = null + for(var/obj/belly/B as anything in M.vore_organs) + B.loc = ourmob + B.forceMove(ourmob) + B.owner = ourmob + M.vore_organs -= B + ourmob.vore_organs += B + + ourmob.Life(1) + if(ishuman(M)) + for(var/obj/item/W in M) + if(istype(W, /obj/item/weapon/implant/backup) || istype(W, /obj/item/device/nif)) + continue + M.drop_from_inventory(W) + + qdel(target) + return + else + if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird. + return + var/mob/living/new_mob = spawn_mob(M) + new_mob.faction = M.faction + + if(new_mob && isliving(new_mob)) + for(var/obj/belly/B as anything in new_mob.vore_organs) + new_mob.vore_organs -= B + qdel(B) + new_mob.vore_organs = list() + new_mob.name = M.name + new_mob.real_name = M.real_name + for(var/lang in M.languages) + new_mob.languages |= lang + M.copy_vore_prefs_to_mob(new_mob) + new_mob.vore_selected = M.vore_selected + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.gender = H.gender + N.identifying_gender = H.identifying_gender + else + new_mob.gender = H.identifying_gender + else + new_mob.gender = M.gender + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.identifying_gender = M.gender + + for(var/obj/belly/B as anything in M.vore_organs) + B.loc = new_mob + B.forceMove(new_mob) + B.owner = new_mob + M.vore_organs -= B + new_mob.vore_organs += B + + new_mob.ckey = M.ckey + if(M.ai_holder && new_mob.ai_holder) + var/datum/ai_holder/old_AI = M.ai_holder + old_AI.set_stance(STANCE_SLEEP) + var/datum/ai_holder/new_AI = new_mob.ai_holder + new_AI.hostile = old_AI.hostile + new_AI.retaliate = old_AI.retaliate + M.loc = new_mob + M.forceMove(new_mob) + new_mob.tf_mob_holder = M + +/obj/item/projectile/beam/mouselaser/proc/spawn_mob(var/mob/living/target) + if(!ispath(tf_type)) + return + var/new_mob = new tf_type(get_turf(target)) + return new_mob + +/mob/living + var/mob/living/tf_mob_holder = null + +/mob/living/proc/revert_mob_tf() + if(!tf_mob_holder) + return + var/mob/living/ourmob = tf_mob_holder + if(ourmob.ai_holder) + var/datum/ai_holder/our_AI = ourmob.ai_holder + our_AI.set_stance(STANCE_IDLE) + tf_mob_holder = null + ourmob.ckey = ckey + var/turf/get_dat_turf = get_turf(src) + ourmob.loc = get_dat_turf + ourmob.forceMove(get_dat_turf) + ourmob.vore_selected = vore_selected + vore_selected = null + for(var/obj/belly/B as anything in vore_organs) + B.loc = ourmob + B.forceMove(ourmob) + B.owner = ourmob + vore_organs -= B + ourmob.vore_organs += B + + ourmob.Life(1) + + if(ishuman(src)) + for(var/obj/item/W in src) + if(istype(W, /obj/item/weapon/implant/backup) || istype(W, /obj/item/device/nif)) + continue + src.drop_from_inventory(W) + + qdel(src) + + +/mob/living/proc/handle_tf_holder() + if(!tf_mob_holder) + return + if(stat != tf_mob_holder.stat) + if(stat == DEAD) + tf_mob_holder.death(FALSE, null) + if(tf_mob_holder.stat == DEAD) + death() + +/mob/living/proc/copy_vore_prefs_to_mob(var/mob/living/new_mob) + //For primarily copying vore preference settings from a carbon mob to a simplemob + //It can be used for other things, but be advised, if you're using it to put a simplemob into a carbon mob, you're gonna be overriding a bunch of prefs + new_mob.ooc_notes = ooc_notes + new_mob.digestable = digestable + new_mob.devourable = devourable + new_mob.absorbable = absorbable + new_mob.feeding = feeding + new_mob.can_be_drop_prey = can_be_drop_prey + new_mob.can_be_drop_pred = can_be_drop_pred + new_mob.latejoin_vore = latejoin_vore + new_mob.digest_leave_remains = digest_leave_remains + new_mob.allowmobvore = allowmobvore + new_mob.permit_healbelly = permit_healbelly + new_mob.noisy = noisy + new_mob.selective_preference = selective_preference + new_mob.drop_vore = drop_vore + new_mob.stumble_vore = stumble_vore + new_mob.slip_vore = slip_vore + new_mob.resizable = resizable + new_mob.show_vore_fx = show_vore_fx + new_mob.step_mechanics_pref = step_mechanics_pref + new_mob.pickup_pref = pickup_pref + new_mob.vore_taste = vore_taste + new_mob.vore_smell = vore_smell + new_mob.nutrition_message_visible = nutrition_message_visible + new_mob.allow_spontaneous_tf = allow_spontaneous_tf + +/////SUBTYPES///// + +/obj/item/weapon/gun/energy/mouseray/medical //This just changes people back, it can't TF people into anything without shenanigans + name = "recombobulation ray" + desc = "The Type Gamma Medical Recombobulation ray! A mysterious looking ray gun! It works to change people who have had their form significantly altered back into their original forms!" + + icon_state = "medray" + item_state = "mouseray" + charge_meter = FALSE + charge_cost = 0 + tf_type = null + projectile_type = /obj/item/projectile/beam/mouselaser/reversion + +/obj/item/weapon/gun/energy/mouseray/medical/consume_next_projectile() + . = ..() + var/obj/item/projectile/beam/mouselaser/reversion/G = . + cooldown = world.time + cooldown_time + if(tf_admin_pref_override) + G.tf_admin_pref_override = tf_admin_pref_override + + +/obj/item/projectile/beam/mouselaser/reversion + name = "recombobulation beam" + tf_admin_pref_override = FALSE + +/obj/item/projectile/beam/mouselaser/reversion/on_hit(var/atom/target) + if(istype(target,/obj/item)) //Are we shooting an item? + var/obj/item/O = target + if(O.possessed_voice.len) //Does the object have a voice? AKA, if someone inhabiting it? + for(var/mob/living/M in O.possessed_voice) + if(M.tf_mob_holder) //Is this item possessed by IC methods? + if(istype(M.loc, /obj/item/clothing)) //Are they in clothes? Delete the item then revert them. + qdel(O) + M.revert_mob_tf() //Voices can't eat, so this is the least intensive way to revert them. + else + M.forceMove(get_turf(O)) //Non-clothing items require a bit extra work since they don't drop contents when qdeleted. + qdel(O) + M.revert_mob_tf() + else + continue //In case they have multiple voices through adminbus. + else + return + var/mob/living/M = target + if(!istype(M)) + return + if(target != firer) //If you shot yourself, you probably want to be TFed so don't bother with prefs. + if(!M.allow_spontaneous_tf && !tf_admin_pref_override) + firer.visible_message("\The [src] buzzes impolitely.") + return + if(M.tf_mob_holder) + var/mob/living/ourmob = M.tf_mob_holder + if(ourmob.ai_holder) + var/datum/ai_holder/our_AI = ourmob.ai_holder + our_AI.set_stance(STANCE_IDLE) + M.tf_mob_holder = null + ourmob.ckey = M.ckey + var/turf/get_dat_turf = get_turf(target) + ourmob.loc = get_dat_turf + ourmob.forceMove(get_dat_turf) + ourmob.vore_selected = M.vore_selected + M.vore_selected = null + for(var/obj/belly/B as anything in M.vore_organs) + B.loc = ourmob + B.forceMove(ourmob) + B.owner = ourmob + M.vore_organs -= B + ourmob.vore_organs += B + + ourmob.Life(1) + + if(ishuman(M)) + for(var/obj/item/W in M) + if(istype(W, /obj/item/weapon/implant/backup) || istype(W, /obj/item/device/nif)) + continue + M.drop_from_inventory(W) + + qdel(target) + firer.visible_message("\The [shot_from] boops pleasantly.") + return + else + firer.visible_message("\The [shot_from] buzzes impolitely.") + +/obj/item/weapon/gun/energy/mouseray/admin //NEVER GIVE THIS TO ANYONE + name = "experimental metamorphosis ray" + cooldown_time = 5 SECONDS + tf_allow_select = TRUE + charge_meter = FALSE + charge_cost = 0 + icon_state = "adminray" + +/obj/item/weapon/gun/energy/mouseray/metamorphosis + name = "metamorphosis ray" + tf_allow_select = TRUE + tf_possible_types = list( + "mouse" = /mob/living/simple_mob/animal/passive/mouse, + "rat" = /mob/living/simple_mob/animal/passive/mouse/rat, + "dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper, + "woof" = /mob/living/simple_mob/vore/woof, + "corgi" = /mob/living/simple_mob/animal/passive/dog/corgi, + "cat" = /mob/living/simple_mob/animal/passive/cat, + "chicken" = /mob/living/simple_mob/animal/passive/chicken, + "cow" = /mob/living/simple_mob/animal/passive/cow, + "lizard" = /mob/living/simple_mob/animal/passive/lizard, + "rabbit" = /mob/living/simple_mob/vore/rabbit, + "fox" = /mob/living/simple_mob/animal/passive/fox, + "fennec" = /mob/living/simple_mob/vore/fennec, + "cute fennec" = /mob/living/simple_mob/animal/passive/fennec, + "fennix" = /mob/living/simple_mob/vore/fennix, + "red panda" = /mob/living/simple_mob/vore/redpanda, + "opossum" = /mob/living/simple_mob/animal/passive/opossum, + "horse" = /mob/living/simple_mob/vore/horse, + "goose" = /mob/living/simple_mob/animal/space/goose, + "sheep" = /mob/living/simple_mob/vore/sheep + ) + +/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced + name = "advanced metamorphosis ray" + tf_possible_types = list( + "mouse" = /mob/living/simple_mob/animal/passive/mouse, + "rat" = /mob/living/simple_mob/animal/passive/mouse/rat, + "giant rat" = /mob/living/simple_mob/vore/aggressive/rat, + "dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper, + "woof" = /mob/living/simple_mob/vore/woof, + "corgi" = /mob/living/simple_mob/animal/passive/dog/corgi, + "cat" = /mob/living/simple_mob/animal/passive/cat, + "chicken" = /mob/living/simple_mob/animal/passive/chicken, + "cow" = /mob/living/simple_mob/animal/passive/cow, + "lizard" = /mob/living/simple_mob/animal/passive/lizard, + "rabbit" = /mob/living/simple_mob/vore/rabbit, + "fox" = /mob/living/simple_mob/animal/passive/fox, + "fennec" = /mob/living/simple_mob/vore/fennec, + "cute fennec" = /mob/living/simple_mob/animal/passive/fennec, + "fennix" = /mob/living/simple_mob/vore/fennix, + "red panda" = /mob/living/simple_mob/vore/redpanda, + "opossum" = /mob/living/simple_mob/animal/passive/opossum, + "horse" = /mob/living/simple_mob/vore/horse, + "goose" = /mob/living/simple_mob/animal/space/goose, + "sheep" = /mob/living/simple_mob/vore/sheep, + "space bumblebee" = /mob/living/simple_mob/vore/bee, + "space bear" = /mob/living/simple_mob/animal/space/bear, + "voracious lizard" = /mob/living/simple_mob/vore/aggressive/dino, + "giant frog" = /mob/living/simple_mob/vore/aggressive/frog, + "jelly blob" = /mob/living/simple_mob/animal/space/jelly, + "wolf" = /mob/living/simple_mob/animal/wolf, + "direwolf" = /mob/living/simple_mob/animal/wolf/direwolf, + "great wolf" = /mob/living/simple_mob/vore/greatwolf, + "sect queen" = /mob/living/simple_mob/vore/sect_queen, + "sect drone" = /mob/living/simple_mob/vore/sect_drone, + "panther" = /mob/living/simple_mob/vore/aggressive/panther, + "giant snake" = /mob/living/simple_mob/vore/aggressive/giant_snake, + "deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw, + "otie" = /mob/living/simple_mob/otie, + "mutated otie" =/mob/living/simple_mob/otie/feral, + "red otie" = /mob/living/simple_mob/otie/red, + "defanged xenomorph" = /mob/living/simple_mob/vore/xeno_defanged, + "catslug" = /mob/living/simple_mob/vore/alienanimals/catslug, + "teppi" = /mob/living/simple_mob/vore/alienanimals/teppi, + "monkey" = /mob/living/carbon/human/monkey, + "wolpin" = /mob/living/carbon/human/wolpin, + "sparra" = /mob/living/carbon/human/sparram, + "saru" = /mob/living/carbon/human/sergallingm, + "sobaka" = /mob/living/carbon/human/sharkm, + "farwa" = /mob/living/carbon/human/farwa, + "neaera" = /mob/living/carbon/human/neaera, + "stok" = /mob/living/carbon/human/stok, + "weretiger" = /mob/living/simple_mob/vore/weretiger, + "dragon" = /mob/living/simple_mob/vore/bigdragon/friendly, + "leopardmander" = /mob/living/simple_mob/vore/leopardmander + ) + +/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced/random + name = "unstable metamorphosis ray" + tf_allow_select = FALSE + +/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced/random/Fire(atom/target, mob/living/user, clickparams, pointblank, reflex) + if(world.time < cooldown) + to_chat(usr, "\The [src] isn't ready yet.") + return + var/choice = pick(tf_possible_types) + tf_type = tf_possible_types[choice] + . = ..() + +/obj/item/weapon/gun/energy/mouseray/woof + name = "woof ray" + tf_type = /mob/living/simple_mob/vore/woof + +/obj/item/weapon/gun/energy/mouseray/corgi + name = "corgi ray" + tf_type = /mob/living/simple_mob/animal/passive/dog/corgi + +/obj/item/weapon/gun/energy/mouseray/cat + name = "cat ray" + tf_type = /mob/living/simple_mob/animal/passive/cat + +/obj/item/weapon/gun/energy/mouseray/chicken + name = "chicken ray" + tf_type = /mob/living/simple_mob/animal/passive/chicken + +/obj/item/weapon/gun/energy/mouseray/lizard + name = "lizard ray" + tf_type = /mob/living/simple_mob/animal/passive/lizard + +/obj/item/weapon/gun/energy/mouseray/rabbit + name = "rabbit ray" + tf_type = /mob/living/simple_mob/vore/rabbit + +/obj/item/weapon/gun/energy/mouseray/fennec + name = "fennec ray" + tf_type = /mob/living/simple_mob/animal/passive/fennec + +/obj/item/weapon/gun/energy/mouseray/monkey + name = "monkey ray" + tf_type = /mob/living/carbon/human/monkey + +/obj/item/weapon/gun/energy/mouseray/wolpin + name = "wolpin ray" + tf_type = /mob/living/carbon/human/wolpin + +/obj/item/weapon/gun/energy/mouseray/otie + name = "otie ray" + tf_type = /mob/living/simple_mob/otie + +/obj/item/weapon/gun/energy/mouseray/direwolf + name = "dire wolf ray" + tf_type = /mob/living/simple_mob/animal/wolf/direwolf + +/obj/item/weapon/gun/energy/mouseray/giantrat + name = "giant rat ray" + tf_type = /mob/living/simple_mob/vore/aggressive/rat + +/obj/item/weapon/gun/energy/mouseray/redpanda + name = "red panda ray" + tf_type = /mob/living/simple_mob/vore/redpanda + +/obj/item/weapon/gun/energy/mouseray/catslug + name = "catslug ray" + tf_type = /mob/living/simple_mob/vore/alienanimals/catslug + +/obj/item/weapon/gun/energy/mouseray/teppi + name = "teppi ray" + tf_type = /mob/living/simple_mob/vore/alienanimals/teppi + + +/////RANDOM SPAWNER///// + +/obj/random/mouseray + name = "random ray" + icon = 'icons/mob/randomlandmarks.dmi' + icon_state = "fanc_trejur" + spawn_nothing_percentage = 0 + +/obj/random/mouseray/item_to_spawn() + return pick(prob(300);/obj/item/weapon/gun/energy/mouseray, + prob(50);/obj/item/weapon/gun/energy/mouseray/corgi, + prob(50);/obj/item/weapon/gun/energy/mouseray/woof, + prob(50);/obj/item/weapon/gun/energy/mouseray/cat, + prob(50);/obj/item/weapon/gun/energy/mouseray/chicken, + prob(50);/obj/item/weapon/gun/energy/mouseray/lizard, + prob(50);/obj/item/weapon/gun/energy/mouseray/rabbit, + prob(50);/obj/item/weapon/gun/energy/mouseray/fennec, + prob(5);/obj/item/weapon/gun/energy/mouseray/monkey, + prob(5);/obj/item/weapon/gun/energy/mouseray/wolpin, + prob(5);/obj/item/weapon/gun/energy/mouseray/otie, + prob(5);/obj/item/weapon/gun/energy/mouseray/direwolf, + prob(5);/obj/item/weapon/gun/energy/mouseray/giantrat, + prob(50);/obj/item/weapon/gun/energy/mouseray/redpanda, + prob(5);/obj/item/weapon/gun/energy/mouseray/catslug, + prob(5);/obj/item/weapon/gun/energy/mouseray/teppi, + prob(1);/obj/item/weapon/gun/energy/mouseray/metamorphosis, + prob(1);/obj/item/weapon/gun/energy/mouseray/metamorphosis/advanced/random + ) diff --git a/code/modules/vore/resizing/holder_micro_vr.dm b/code/modules/vore/resizing/holder_micro_vr.dm index 7628fbac37..f0ae813eb1 100644 --- a/code/modules/vore/resizing/holder_micro_vr.dm +++ b/code/modules/vore/resizing/holder_micro_vr.dm @@ -10,7 +10,7 @@ item_icons = null // No in-hand sprites (for now, anyway, we could totally add some) pixel_y = 0 // Override value from parent. -/obj/item/weapon/holder/micro/examine(mob/user) +/obj/item/weapon/holder/examine(mob/user) . = list() for(var/mob/living/M in contents) . += M.examine(user) diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index 759fe3046f..f531ad05fe 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -39,12 +39,20 @@ * but in the future we may also incorporate the "mob_size", so that * a macro mouse is still only effectively "normal" or a micro dragon is still large etc. */ -/mob/proc/get_effective_size() +/mob/proc/get_effective_size(var/micro = FALSE) return 100000 //Whatever it is, it's too big to pick up, or it's a ghost, or something. -/mob/living/get_effective_size() +/mob/living/get_effective_size(var/micro = FALSE) return size_multiplier +/mob/living/carbon/human/get_effective_size(var/micro = FALSE) // Set micro to TRUE for interactions where you're small, to FALSE for ones where you're large. + var/effective_size = size_multiplier + if(micro) + effective_size += species.micro_size_mod + else + effective_size += species.macro_size_mod + return effective_size + /atom/movable/proc/size_range_check(size_select) //both objects and mobs needs to have that var/area/A = get_area(src) //Get the atom's area to check for size limit. if((A?.limit_mob_size && (size_select > 200 || size_select < 25)) || (size_select > 600 || size_select <1)) @@ -140,7 +148,7 @@ var/nagmessage = "Adjust your mass to be a size between 25 to 200% (or 1% to 600% in dormitories). (DO NOT ABUSE)" var/default = size_multiplier * 100 - var/new_size = tgui_input_number(usr, nagmessage, "Pick a Size", default) + var/new_size = tgui_input_number(usr, nagmessage, "Pick a Size", default, 600, 1) if(size_range_check(new_size)) resize(new_size/100, uncapped = has_large_resize_bounds(), ignore_prefs = TRUE) if(temporary_form) //CHOMPEdit - resizing both our forms @@ -164,7 +172,7 @@ return 0 if(!(M.a_intent == I_HELP)) return 0 - var/size_diff = M.get_effective_size() - get_effective_size() + var/size_diff = M.get_effective_size(FALSE) - get_effective_size(TRUE) if(!holder_default && holder_type) holder_default = holder_type if(!istype(M)) @@ -198,16 +206,16 @@ return TRUE //Both small! Go ahead and go. - if(get_effective_size() <= RESIZE_A_SMALLTINY && tmob.get_effective_size() <= RESIZE_A_SMALLTINY) + if(get_effective_size(TRUE) <= RESIZE_A_SMALLTINY && tmob.get_effective_size(TRUE) <= RESIZE_A_SMALLTINY) // For help intent interaction just assume both are 'smol' return TRUE //Worthy of doing messages at all - if(abs(get_effective_size() - tmob.get_effective_size()) >= 0.50) + if(abs(get_effective_size(TRUE) - tmob.get_effective_size(TRUE)) >= 0.50) var/src_message = null var/tmob_message = null //Smaller person being stepped onto - if(get_effective_size() > tmob.get_effective_size() && ishuman(src)) + if(get_effective_size(TRUE) > tmob.get_effective_size(TRUE) && ishuman(src)) src_message = "You carefully step over [tmob]." tmob_message = "[src] steps over you carefully!" var/mob/living/carbon/human/H = src @@ -219,7 +227,7 @@ tmob_message = tail.msg_prey_help_run //Smaller person stepping under larger person - else if(get_effective_size() < tmob.get_effective_size() && ishuman(tmob)) + else if(get_effective_size(TRUE) < tmob.get_effective_size(TRUE) && ishuman(tmob)) src_message = "You run between [tmob]'s legs." tmob_message = "[src] runs between your legs." var/mob/living/carbon/human/H = tmob @@ -270,7 +278,7 @@ // We need to be above a certain size ratio in order to do anything to the prey. // For DISARM and HURT intent, this is >=0.75, for GRAB it is >=0.5 - var/size_ratio = get_effective_size() - tmob.get_effective_size() + var/size_ratio = get_effective_size(FALSE) - tmob.get_effective_size(TRUE) if((a_intent == I_GRAB || a_intent == I_DISARM) && size_ratio < 0.5) //CHOMPEDIT - more step changes return FALSE if(a_intent == I_HURT && size_ratio < 0.75) diff --git a/code/modules/vore/resizing/sizegun_slow_vr.dm b/code/modules/vore/resizing/sizegun_slow_vr.dm index 5a267cb6da..d6edc19361 100644 --- a/code/modules/vore/resizing/sizegun_slow_vr.dm +++ b/code/modules/vore/resizing/sizegun_slow_vr.dm @@ -50,16 +50,16 @@ if(unresizable) return TRUE - if(!(target.has_large_resize_bounds()) && (target.get_effective_size() >= RESIZE_MAXIMUM) && sizeshift_mode == SIZE_GROW) + if(!(target.has_large_resize_bounds()) && (target.size_multiplier >= RESIZE_MAXIMUM) && sizeshift_mode == SIZE_GROW) return TRUE - if(target.get_effective_size() >= RESIZE_MAXIMUM_DORMS && sizeshift_mode == SIZE_GROW) + if(target.size_multiplier >= RESIZE_MAXIMUM_DORMS && sizeshift_mode == SIZE_GROW) return TRUE - if(!(target.has_large_resize_bounds()) && (target.get_effective_size() <= RESIZE_MINIMUM) && sizeshift_mode == SIZE_SHRINK) + if(!(target.has_large_resize_bounds()) && (target.size_multiplier <= RESIZE_MINIMUM) && sizeshift_mode == SIZE_SHRINK) return TRUE - if(target.get_effective_size() <= RESIZE_MINIMUM_DORMS && sizeshift_mode == SIZE_SHRINK) + if(target.size_multiplier <= RESIZE_MINIMUM_DORMS && sizeshift_mode == SIZE_SHRINK) return TRUE return FALSE @@ -123,9 +123,9 @@ stoplag(3) if(sizeshift_mode == SIZE_SHRINK) - L.resize((L.get_effective_size() - size_increment), uncapped = L.has_large_resize_bounds(), aura_animation = FALSE) + L.resize((L.size_multiplier - size_increment), uncapped = L.has_large_resize_bounds(), aura_animation = FALSE) else if(sizeshift_mode == SIZE_GROW) - L.resize((L.get_effective_size() + size_increment), uncapped = L.has_large_resize_bounds(), aura_animation = FALSE) + L.resize((L.size_multiplier + size_increment), uncapped = L.has_large_resize_bounds(), aura_animation = FALSE) busy = FALSE current_target = null diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/code/modules/vore/resizing/sizegun_vr.dm index d932351db1..8decb8dde6 100644 --- a/code/modules/vore/resizing/sizegun_vr.dm +++ b/code/modules/vore/resizing/sizegun_vr.dm @@ -136,6 +136,7 @@ damage = 0 check_armour = "laser" var/set_size = 1 //Let's default to 100% + can_miss = FALSE muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray diff --git a/code/modules/vore/smoleworld/smoleworld_vr.dm b/code/modules/vore/smoleworld/smoleworld_vr.dm index f9d1c92a64..ae44a9ab2b 100644 --- a/code/modules/vore/smoleworld/smoleworld_vr.dm +++ b/code/modules/vore/smoleworld/smoleworld_vr.dm @@ -19,9 +19,9 @@ var/mob/living/L = A if(L.hovering) // Flying things shouldn't make footprints. return ..() - if(L.get_effective_size() <= RESIZE_NORMAL) + if(L.get_effective_size(FALSE) <= RESIZE_NORMAL) return ..() - if(L.get_effective_size() >= RESIZE_A_BIGNORMAL) + if(L.get_effective_size(FALSE) >= RESIZE_A_BIGNORMAL) playsound(src, 'sound/effects/footstep/giantstep_gigga.ogg', 35, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) var/mdir = "[A.dir]" crossed_dirs[mdir] = 1 @@ -365,7 +365,7 @@ // . = ..() // if(.) // -// if(M.get_effective_size() > RESIZE_TINY) +// if(M.get_effective_size(TRUE) > RESIZE_TINY) // to_chat(M, SPAN_WARNING("You are to big to fit in \the [src].")) // . = FALSE // diff --git a/code/modules/xenoarcheaology/artifacts/artifact_find.dm b/code/modules/xenoarcheaology/artifacts/artifact_find.dm index fe91bbadbc..dcbe6bea84 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact_find.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact_find.dm @@ -13,6 +13,7 @@ 25;/obj/machinery/power/supermatter/shard, 100;/obj/machinery/auto_cloner, 100;/obj/machinery/giga_drill, - 100;/obj/machinery/replicator, + 100;/obj/machinery/replicator/clothing, //VOREStation Edit: use virgo-specific subtype that allows TF into items. + 100;/obj/machinery/replicator/vore, //VOREStation Edit: use virgo-specific subtype that allows TF into mobs. 150;/obj/structure/crystal, 1000;/obj/machinery/artifact) diff --git a/code/modules/xenoarcheaology/artifacts/autocloner.dm b/code/modules/xenoarcheaology/artifacts/autocloner.dm index 96195fd700..03ece599dd 100644 --- a/code/modules/xenoarcheaology/artifacts/autocloner.dm +++ b/code/modules/xenoarcheaology/artifacts/autocloner.dm @@ -46,17 +46,17 @@ if(!previous_power_state) previous_power_state = 1 icon_state = "cellold1" - src.visible_message("[bicon(src)] [src] suddenly comes to life!") + src.visible_message("\icon[src][bicon(src)] [src] suddenly comes to life!") //slowly grow a mob if(prob(5)) - src.visible_message("[bicon(src)] [src] [pick("gloops","glugs","whirrs","whooshes","hisses","purrs","hums","gushes")].") + src.visible_message("\icon[src][bicon(src)] [src] [pick("gloops","glugs","whirrs","whooshes","hisses","purrs","hums","gushes")].") //if we've finished growing... if(time_spent_spawning >= time_per_spawn) time_spent_spawning = 0 update_use_power(USE_POWER_IDLE) - src.visible_message("[bicon(src)] [src] pings!") + src.visible_message("\icon[src][bicon(src)] [src] pings!") icon_state = "cellold1" desc = "It's full of a bubbling viscous liquid, and is lit by a mysterious glow." if(spawn_type) @@ -77,7 +77,7 @@ if(previous_power_state) previous_power_state = 0 icon_state = "cellold0" - src.visible_message("[bicon(src)] [src] suddenly shuts down.") + src.visible_message("\icon[src][bicon(src)] [src] suddenly shuts down.") //cloned mob slowly breaks down time_spent_spawning = max(time_spent_spawning + last_process - world.time, 0) diff --git a/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm b/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm index c4141ff192..bce3d8d602 100644 --- a/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm +++ b/code/modules/xenoarcheaology/artifacts/predefined/hungry_statue.dm @@ -1,6 +1,7 @@ /obj/machinery/artifact/predefined/hungry_statue name = "alien artifact" desc = "A large alien device." + icon = 'icons/obj/xenoarchaeology.dmi' //CHOMP Fix artifact_master = /datum/component/artifact_master/hungry_statue diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm index f3ad6d674c..d6796c6ad1 100644 --- a/code/modules/xenoarcheaology/artifacts/replicator.dm +++ b/code/modules/xenoarcheaology/artifacts/replicator.dm @@ -98,7 +98,7 @@ "foreground" = colors[color], ))) - fail_message = "[bicon(src)] a [pick("loud","soft","sinister","eery","triumphant","depressing","cheerful","angry")] \ + fail_message = "\icon[src][bicon(src)] a [pick("loud","soft","sinister","eery","triumphant","depressing","cheerful","angry")] \ [pick("horn","beep","bing","bleep","blat","honk","hrumph","ding")] sounds and a \ [pick("yellow","purple","green","blue","red","orange","white")] \ [pick("light","dial","meter","window","protrusion","knob","antenna","swirly thing")] \ @@ -110,7 +110,7 @@ if(spawning_types.len && powered()) spawn_progress_time += world.time - last_process_time if(spawn_progress_time > max_spawn_time) - src.visible_message("[bicon(src)] [src] pings!") + src.visible_message("\icon[src][bicon(src)] [src] pings!") var/obj/source_material = pop(stored_materials) var/spawn_type = pop(spawning_types) @@ -133,7 +133,7 @@ icon_state = "borgcharger0(old)" else if(prob(5)) - src.visible_message("[bicon(src)] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") + src.visible_message("\icon[src][bicon(src)] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") last_process_time = world.time @@ -161,9 +161,9 @@ if(key in construction) if(LAZYLEN(stored_materials) > LAZYLEN(spawning_types)) if(LAZYLEN(spawning_types)) - visible_message("[bicon(src)] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") + visible_message("\icon[src][bicon(src)] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") else - visible_message("[bicon(src)] [src]'s front compartment slides shut.") + visible_message("\icon[src][bicon(src)] [src]'s front compartment slides shut.") spawning_types.Add(construction[key]) spawn_progress_time = 0 update_use_power(USE_POWER_ACTIVE) diff --git a/code/modules/xenoarcheaology/artifacts/replicator_vr.dm b/code/modules/xenoarcheaology/artifacts/replicator_vr.dm new file mode 100644 index 0000000000..8fc3dba9b4 --- /dev/null +++ b/code/modules/xenoarcheaology/artifacts/replicator_vr.dm @@ -0,0 +1,598 @@ + +////////////////////////////// +//////VORE-MOB REPLICATOR///// +////////////////////////////// +/obj/machinery/replicator/vore + name = "alien machine" + desc = "It's some kind of pod with strange wires and gadgets all over it. This one appears to have a humanoid shaped slot as an input. It has depictions of various creatures on the buttons." //Explain to the user that it turns people into mobs. + icon = 'icons/obj/xenoarchaeology.dmi' + icon_state = "borgcharger0(old)" + var/quantity = 18 //This needs to be replaced with a GUI that lets you select the item you want. + var/list/created_mobs = list() + var/list/tgui_vore_selection = list() + var/list/viable_mobs = list( + /mob/living/simple_mob/animal/passive/fox, + /mob/living/simple_mob/animal/passive/cow, + /mob/living/simple_mob/animal/passive/chicken, + /mob/living/simple_mob/animal/passive/opossum, + /mob/living/simple_mob/animal/passive/mouse, + /mob/living/simple_mob/vore/rabbit, + /mob/living/simple_mob/animal/goat, + /mob/living/simple_mob/animal/sif/tymisian, + /mob/living/simple_mob/animal/wolf/direwolf, + /mob/living/simple_mob/otie/friendly, + /mob/living/simple_mob/vore/alienanimals/catslug, + /mob/living/simple_mob/vore/alienanimals/teppi, + /mob/living/simple_mob/vore/fennec, + /mob/living/simple_mob/vore/xeno_defanged, + /mob/living/simple_mob/vore/redpanda/fae, + /mob/living/simple_mob/vore/aggressive/rat, + /mob/living/simple_mob/vore/aggressive/panther, + /mob/living/simple_mob/vore/aggressive/frog + ) + //Mostly friendly mobs, but occasionally some dangerous ones. + //So if xenoarch isn't careful and is just shoving items willy-nilly without taking the proper precautions they can end up in a bit of trouble! + + +/obj/machinery/replicator/vore/New() //This replicator turns people into mobs! + ..() //TODO: Someone can replace the 'alien' interface with something neater sometime. It is simply out of my abilities at the current moment. + + for(var/i=0, i max_spawn_time) + src.visible_message("\icon[src][bicon(src)] [src] pings!") + + var/obj/source_material = pop(stored_materials) + var/spawn_type = pop(spawning_types) + var/mob/living/simple_mob/new_mob = new spawn_type(src.loc) //The MOB that's spawned in. + + if(source_material) + if(length(source_material.name) < MAX_MESSAGE_LEN) + new_mob.name = "[source_material] " + new_mob.name + if(length(source_material.desc) < MAX_MESSAGE_LEN * 2) + if(new_mob.desc) + new_mob.desc += " It is made of [source_material]." + else + new_mob.desc = "It is made of [source_material]." + //Did they use an item? If so, we're done here. + + //Did they put a micro in it? + if(istype(source_material,/obj/item/weapon/holder/micro)) + var/obj/item/weapon/holder/micro/micro_holder = source_material + var/mob/mob_to_be_changed = micro_holder.held_mob + var/mob/living/M = mob_to_be_changed + //Start of mob code shamelessly ripped from mouseray + new_mob.faction = M.faction + + if(new_mob && isliving(new_mob)) + for(var/obj/belly/B as anything in new_mob.vore_organs) + new_mob.vore_organs -= B + qdel(B) + new_mob.vore_organs = list() + new_mob.name = M.name + new_mob.real_name = M.real_name + for(var/lang in M.languages) + new_mob.languages |= lang + M.copy_vore_prefs_to_mob(new_mob) + new_mob.vore_selected = M.vore_selected + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.gender = H.gender + N.identifying_gender = H.identifying_gender + else + new_mob.gender = H.identifying_gender + else + new_mob.gender = M.gender + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.identifying_gender = M.gender + + for(var/obj/belly/B as anything in M.vore_organs) + B.loc = new_mob + B.forceMove(new_mob) + B.owner = new_mob + M.vore_organs -= B + new_mob.vore_organs += B + + new_mob.ckey = M.ckey + if(M.ai_holder && new_mob.ai_holder) + var/datum/ai_holder/old_AI = M.ai_holder + old_AI.set_stance(STANCE_SLEEP) + var/datum/ai_holder/new_AI = new_mob.ai_holder + new_AI.hostile = old_AI.hostile + new_AI.retaliate = old_AI.retaliate + M.loc = new_mob + M.forceMove(new_mob) + new_mob.tf_mob_holder = M + ///End of mobcode. + qdel(source_material) + M.forceMove(new_mob) + + //Did they put a person in it? + else if(istype(source_material,/mob/living)) + var/mob/living/M = source_material + //Start of mob code shamelessly ripped from mouseray + new_mob.faction = M.faction + + if(new_mob && isliving(new_mob)) + for(var/obj/belly/B as anything in new_mob.vore_organs) + new_mob.vore_organs -= B + qdel(B) + new_mob.vore_organs = list() + new_mob.name = M.name + new_mob.real_name = M.real_name + for(var/lang in M.languages) + new_mob.languages |= lang + M.copy_vore_prefs_to_mob(new_mob) + new_mob.vore_selected = M.vore_selected + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.gender = H.gender + N.identifying_gender = H.identifying_gender + else + new_mob.gender = H.identifying_gender + else + new_mob.gender = M.gender + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.identifying_gender = M.gender + + for(var/obj/belly/B as anything in M.vore_organs) + B.loc = new_mob + B.forceMove(new_mob) + B.owner = new_mob + M.vore_organs -= B + new_mob.vore_organs += B + + new_mob.ckey = M.ckey + if(M.ai_holder && new_mob.ai_holder) + var/datum/ai_holder/old_AI = M.ai_holder + old_AI.set_stance(STANCE_SLEEP) + var/datum/ai_holder/new_AI = new_mob.ai_holder + new_AI.hostile = old_AI.hostile + new_AI.retaliate = old_AI.retaliate + M.loc = new_mob + M.forceMove(new_mob) + new_mob.tf_mob_holder = M + ///End of mobcode. + + + spawn_progress_time = 0 + max_spawn_time = rand(30,100) + + if(!spawning_types.len || !stored_materials.len) + update_use_power(USE_POWER_IDLE) + icon_state = "borgcharger0(old)" + + else if(prob(5)) + src.visible_message("\icon[src][bicon(src)] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") + + last_process_time = world.time + + +/obj/machinery/replicator/vore/attackby(obj/item/weapon/W as obj, mob/living/user as mob) + if(!W.canremove || !user.canUnEquip(W) || W.possessed_voice || is_type_in_list(W,item_vore_blacklist)) //No armblades, no putting possessed items in it! + to_chat(user, "You cannot put \the [W] into the machine.") + return + if(istype(W, /obj/item/weapon/holder/micro)) //Are you putting a micro in it? + var/obj/item/weapon/holder/micro/micro_holder = W + var/mob/living/inserted_mob = micro_holder.held_mob //Get the actual mob. + if(!inserted_mob.allow_spontaneous_tf) //Do they allow TF? + to_chat(user, "You cannot put \the [W] into the machine. ((The prefs of the micro forbid this action.))") + return + if(inserted_mob.stat == DEAD) //Hey medical... + to_chat(user, "[W] is dead.") + return + if(inserted_mob.tf_mob_holder) + to_chat(user, "[W] must be in their original form.") + return + if(inserted_mob.client) + var/response //Let's see if they are SURE they accept the fact they will be a clothing, plushie, or something else. + response = tgui_alert(inserted_mob, "Are you -sure- you want to be put in this machine?\n(This machine will turn you into one of the various types of mobs in the game.)", "WARNING: Are you sure you want to be put in the machine and transformed?", list("No", "Certain")) + if(response != "Certain") //If they don't agree, stop. + to_chat(user, "[W] stops you from placing them in the machine.") + return + else //If they /do/ agree, give them one last chance. + response = tgui_alert(inserted_mob, "This is the last warning: Are you absolutely certain you want to be transformed into a mob?", "WARNING: FINAL CHANCE!", list("No", "Certain")) + if(response != "Certain") + to_chat(user, "[W] stops you from placing them in the machine.") + return + if(istype(inserted_mob, /mob/living/voice) || W.loc == src) //Sanity. + return + log_and_message_admins("[user] has just placed [inserted_mob] into a mob transformation machine.", user) + else + to_chat(user, "You cannot put \the [W] into the machine. ((The micro must be connected to the server.))") + return + else if(istype(W,/obj/item/weapon/grab)) //Is someone being shoved into the machine? + var/obj/item/weapon/grab/the_grab = W + var/mob/living/inserted_mob = the_grab.affecting //Get the mob that is grabbed. + if(!inserted_mob.allow_spontaneous_tf) + to_chat(user, "You cannot put \the [W] into the machine. ((The prefs of the micro forbid this action.))") + return + if(inserted_mob.stat == DEAD) + to_chat(user, "[W] is dead.") + return + if(inserted_mob.tf_mob_holder) + to_chat(user, "[W] must be in their original form.") + return + if(inserted_mob.client) + var/response + response = tgui_alert(inserted_mob, "Are you -sure- you want to be put in this machine?\n(This machine will turn you into one of the various types of mobs in the game.)", "WARNING: Are you sure you want to be put in the machine and transformed?", list("No", "Certain")) + if(response != "Certain") + to_chat(user, "[W] stops you from placing them in the machine.") + return + else + response = tgui_alert(inserted_mob, "This is the last warning: Are you absolutely certain you want to be transformed into a mob?", "WARNING: FINAL CHANCE!", list("No", "Certain")) + if(response != "Certain") + to_chat(user, "[W] stops you from placing them in the machine.") + return + if(istype(inserted_mob, /mob/living/voice) || W.loc == src) + return + log_and_message_admins("[user] has just placed [inserted_mob] into a mob transformation machine.", user) + user.drop_item() //Dropping a grab destroys it. + //Grabs require a bit of extra work. + //We want them to drop their clothing/items as well. + if(istype(inserted_mob, /mob/living/carbon/human)) //So, this WORKS. Works very well! + var/mob/living/carbon/human/inserted_human = inserted_mob + for(var/obj/item/I in inserted_mob) + if(istype(I, /obj/item/weapon/implant) || istype(I, /obj/item/device/nif)) + continue + inserted_human.drop_from_inventory(I) + inserted_mob.loc = src + stored_materials.Add(inserted_mob) + src.visible_message("\The [user] inserts \the [inserted_mob] into \the [src].") + return + else + to_chat(user, "You cannot put \the [W] into the machine. ((The micro must be connected to the server.))") + return + else if(istype(W, /obj/item/weapon/holder/mouse)) //No you can't turn your army of mice into giant rats. + to_chat(user, "You cannot put \the [W] into the machine. The machine reads 'NOT ENOUGH BIOMASS'.") + return + user.drop_item() //Put the micro on the floor (or drop the item) + if(istype(W, /obj/item/weapon/holder/micro)) //I hate this but it's the only way to get their stuff to drop. + var/obj/item/weapon/holder/micro/micro_holder = W + var/mob/living/inserted_mob = micro_holder.held_mob //Get the actual mob. + if(istype(inserted_mob, /mob/living/carbon/human)) //Only humans have the drop_from_inventory proc. + var/mob/living/carbon/human/inserted_human = inserted_mob + for(var/obj/item/I in inserted_human) //Drop any remaining items! This only really seems to affect hands. + if(istype(I, /obj/item/weapon/implant) || istype(I, /obj/item/device/nif)) + continue + inserted_human.drop_from_inventory(I) + //Now that we've dropped all the items they have, let's shove them back into the micro holder. + W.loc = src + stored_materials.Add(W) + src.visible_message("\The [user] inserts \the [W] into \the [src].") + +/obj/machinery/replicator/vore/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + data["tgui_construction"] = tgui_vore_selection + return data + +/obj/machinery/replicator/vore/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("construct") + var/key = params["key"] + if(key in created_mobs) + if(LAZYLEN(stored_materials) > LAZYLEN(spawning_types)) + if(LAZYLEN(spawning_types)) + visible_message("\icon[src][bicon(src)] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") + else + visible_message("\icon[src][bicon(src)] [src]'s front compartment slides shut.") + spawning_types.Add(created_mobs[key]) + spawn_progress_time = 0 + update_use_power(USE_POWER_ACTIVE) + icon_state = "borgcharger1(old)" + else + visible_message(fail_message) + + +/obj/machinery/replicator/clothing/tgui_interact(mob/user, datum/tgui/ui) //This creates the menu. + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "XenoarchReplicator_voremob_vr", name) + ui.open() + + + + + +////////////////////////////// +//////CLOTHING REPLICATOR///// +////////////////////////////// + +/obj/machinery/replicator/clothing + name = "alien machine" + desc = "It's some kind of pod with strange wires and gadgets all over it. This one appears to have a humanoid shaped slot as an input and images of various objects on the buttons." //This hole was made for me! + icon = 'icons/obj/xenoarchaeology.dmi' + icon_state = "borgcharger0(old)" + var/quantity = 35 //This needs to be replaced with a GUI that lets you select the item you want. + var/list/created_items = list() + var/list/tgui_vore_selection = list() + var/list/viable_items = list( + /obj/item/clothing/gloves/ring, + /obj/item/clothing/gloves/evening, + /obj/item/clothing/gloves/black, + /obj/item/clothing/under/swimsuit/black, + /obj/item/clothing/under/shorts/black, + /obj/item/clothing/under/wetsuit_skimpy, + /obj/item/clothing/under/dress/maid, + /obj/item/clothing/under/fluff/latexmaid, + /obj/item/clothing/suit/oversize, + /obj/item/clothing/suit/kimono/red, + /obj/item/clothing/suit/storage/fluff/loincloth, + /obj/item/toy/plushie/lizardplushie/kobold, + /obj/item/toy/plushie/borgplushie/medihound, + /obj/item/toy/plushie/marble_fox, + /obj/item/toy/plushie/lizard, + /obj/item/toy/plushie/tuxedo_cat, + /obj/item/clothing/head/pin/flower, + /obj/item/clothing/head/wizard, + /obj/item/clothing/head/wizard/marisa, + /obj/item/clothing/head/beret, + /obj/item/clothing/head/that, + /obj/item/clothing/head/bowler, + /obj/item/clothing/shoes/hitops/red, + /obj/item/clothing/shoes/boots/jackboots, + /obj/item/clothing/shoes/boots/workboots, + /obj/item/clothing/shoes/boots/workboots/toeless, + /obj/item/clothing/shoes/flipflop, + /obj/item/clothing/shoes/boots/duty, + /obj/item/clothing/shoes/footwraps, + /obj/item/weapon/storage/smolebrickcase, + /obj/item/weapon/lipstick, + /obj/item/weapon/material/fishing_rod/modern, + /obj/item/weapon/inflatable_duck, + /obj/item/toy/syndicateballoon, + /obj/item/weapon/towel, + /obj/item/weapon/bedsheet/rainbowdouble + ) // Currently: 3 gloves, 5 undersuits, 3 oversuits, 5 plushies, 5 headwear, 7 shoes, 7 misc. = 35 + //Fishing hat was going to be added, but it was simply too powerful for this world. + +/obj/machinery/replicator/clothing/New() //The specific thing about the VORE replicator is that it will only contain obj/items. Only things that can be picked up, used, and worn! + ..() //TODO: Someone can replace the 'alien' interface with something neater sometime. It is simply out of my abilities at the current moment. + + for(var/i=0, i max_spawn_time) + src.visible_message("\icon[src][bicon(src)] [src] pings!") + + var/obj/source_material = pop(stored_materials) + var/spawn_type = pop(spawning_types) + var/obj/item/spawned_obj = new spawn_type(src.loc) + var/obj/item/original_name = spawned_obj.name //Get the item's name before it's prefixed. Used for micro code. + if(source_material) + if(length(source_material.name) < MAX_MESSAGE_LEN) + spawned_obj.name = "[source_material] " + spawned_obj.name + if(length(source_material.desc) < MAX_MESSAGE_LEN * 2) + if(spawned_obj.desc) + spawned_obj.desc += " It is made of [source_material]." + else + spawned_obj.desc = "It is made of [source_material]." + if(istype(source_material,/obj/item/weapon/holder/micro)) + var/obj/item/weapon/holder/micro/micro_holder = source_material //Tells the machine that a micro is the material being used + var/mob/mob_to_be_changed = micro_holder.held_mob //Get the mob. + var/mob/living/M = mob_to_be_changed + M.release_vore_contents(TRUE, TRUE) //Release their stomach contents. Don't spam the chat, either. + spawned_obj.inhabit_item(M, original_name, M) //Take the spawned mob and call the TF proc on it. + var/mob/living/possessed_voice = spawned_obj.possessed_voice //Get the possessed voice. + qdel(source_material) //Deletes the micro holder, we don't need it anymore. + spawned_obj.trash_eatable = M.devourable //Can this item be eaten? Let's decide based on the person's prefs! + spawned_obj.unacidable = !M.digestable //Can this item be digested? + M.forceMove(possessed_voice) //Places them in the 'voice' for later recovery! Essentially: The item contains a 'possessed voice' mob, which contains their original mob. + + + else if(istype(source_material,/mob/living))//Did they shove a person in there normally? + var/mob/living/M = source_material //If so, this cuts down the work we have to do! + M.release_vore_contents(TRUE, TRUE) //Release their stomach contents. Don't spam the chat, either. + spawned_obj.inhabit_item(M, original_name, M) + var/mob/living/possessed_voice = spawned_obj.possessed_voice + spawned_obj.trash_eatable = M.devourable + spawned_obj.unacidable = !M.digestable + M.forceMove(possessed_voice) + + + spawn_progress_time = 0 + max_spawn_time = rand(30,100) + + if(!spawning_types.len || !stored_materials.len) + update_use_power(USE_POWER_IDLE) + icon_state = "borgcharger0(old)" + + else if(prob(5)) + src.visible_message("\icon[src][bicon(src)] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") + + last_process_time = world.time + +/obj/machinery/replicator/clothing/attackby(obj/item/weapon/W as obj, mob/living/user as mob) + if(!W.canremove || !user.canUnEquip(W) || W.possessed_voice || is_type_in_list(W,item_vore_blacklist)) //No armblades, no putting already possessed items in it! + to_chat(user, "You cannot put \the [W] into the machine.") + return + if(istype(W, /obj/item/weapon/holder/micro) || istype(W, /obj/item/weapon/holder/mouse)) //Are you putting a micro/mouse in it? + var/obj/item/weapon/holder/micro/micro_holder = W + var/mob/living/inserted_mob = micro_holder.held_mob //Get the actual mob. + if(!inserted_mob.allow_spontaneous_tf) //Do they allow TF? + to_chat(user, "You cannot put \the [W] into the machine. ((The prefs of the micro forbid this action.))") + return + if(inserted_mob.stat == DEAD) //Hey medical... + to_chat(user, "[W] is dead.") + return + if(inserted_mob.tf_mob_holder) //No recursion!!! + to_chat(user, "[W] must be in their original form.") + return + if(inserted_mob.client) + var/response //Let's see if they are SURE they accept the fact they will be a clothing, plushie, or something else. + response = tgui_alert(inserted_mob, "Are you -sure- you want to be put in this machine?\n(This machine can turn you into various clothing, footwear, plushies, and other miscellaneous objects. This means that more likely than not, you will be used as whatever object is used. Make certain your preferences align with this possibility.)", "WARNING: Are you sure you want to be put in the machine and transformed?", list("No", "Certain")) + if(response != "Certain") //If they don't agree, stop. + to_chat(user, "[W] stops you from placing them in the machine.") + return + else //If they /do/ agree, give them one last chance. + response = tgui_alert(inserted_mob, "This is the last warning: Are you absolutely certain you want to be transformed into an object and have the possibility of being used as such?", "WARNING: FINAL CHANCE!", list("No", "I accept the possibilities")) + if(response != "I accept the possibilities") + to_chat(user, "[W] stops you from placing them in the machine.") + return + if(istype(inserted_mob, /mob/living/voice) || W.loc == src) //This is a sanity check to keep them from entering it multiple times. + return + log_and_message_admins("[user] has just placed [inserted_mob] into an item transformation machine.", user) + else + to_chat(user, "You cannot put \the [W] into the machine. ((The micro must be connected to the server.))") + return + else if(istype(W,/obj/item/weapon/grab)) //Is someone being shoved into the machine? + var/obj/item/weapon/grab/the_grab = W + var/mob/living/inserted_mob = the_grab.affecting //Get the mob that is grabbed. + if(!inserted_mob.allow_spontaneous_tf) + to_chat(user, "You cannot put \the [W] into the machine. ((The prefs of the micro forbid this action.))") + return + if(inserted_mob.stat == DEAD) + to_chat(user, "[W] is dead.") + return + if(inserted_mob.tf_mob_holder) + to_chat(user, "[W] must be in their original form.") + return + if(inserted_mob.client) + var/response + response = tgui_alert(inserted_mob, "Are you -sure- you want to be put in this machine?\n(This machine can turn you into various clothing, footwear, plushies, and other miscellaneous objects. This means that more likely than not, you will be used as whatever object is used. Make certain your preferences align with this possibility.)", "WARNING: Are you sure you want to be put in the machine and transformed?", list("No", "Certain")) + if(response != "Certain") + to_chat(user, "[W] stops you from placing them in the machine.") + return + else + response = tgui_alert(inserted_mob, "This is the last warning: Are you absolutely certain you want to be transformed into an object and have the possibility of being used as such?", "WARNING: FINAL CHANCE!", list("No", "I accept the possibilities")) + if(response != "I accept the possibilities") + to_chat(user, "[W] stops you from placing them in the machine.") + return + if(istype(inserted_mob, /mob/living/voice) || W.loc == src) + return + log_and_message_admins("[user] has just placed [inserted_mob] into an item transformation machine.", user) + user.drop_item() //Dropping a grab destroys it. + //Grabs require a bit of extra work. + //We want them to drop their clothing/items as well. + if(istype(inserted_mob, /mob/living/carbon/human)) //So, this WORKS. Works very well! + var/mob/living/carbon/human/inserted_human = inserted_mob + for(var/obj/item/I in inserted_mob) + if(istype(I, /obj/item/weapon/implant) || istype(I, /obj/item/device/nif)) + continue + inserted_human.drop_from_inventory(I) + inserted_mob.loc = src + stored_materials.Add(inserted_mob) + src.visible_message("\The [user] inserts \the [inserted_mob] into \the [src].") + return + else + to_chat(user, "You cannot put \the [W] into the machine. ((They must be connected to the server.))") + return + + user.drop_item() //Put the micro on the floor (or drop the item) + if(istype(W, /obj/item/weapon/holder/micro)) //I hate this but it's the only way to get their stuff to drop. + var/obj/item/weapon/holder/micro/micro_holder = W + var/mob/living/inserted_mob = micro_holder.held_mob //Get the actual mob. + if(istype(inserted_mob, /mob/living/carbon/human)) //Only humans have the drop_from_inventory proc. + var/mob/living/carbon/human/inserted_human = inserted_mob + for(var/obj/item/I in inserted_human) //Drop any remaining items! This only really seems to affect hands. + if(istype(I, /obj/item/weapon/implant) || istype(I, /obj/item/device/nif)) + continue + inserted_human.drop_from_inventory(I) + //Now that we've dropped all the items they have, let's shove them back into the micro holder. + W.loc = src + stored_materials.Add(W) + src.visible_message("\The [user] inserts \the [W] into \the [src].") + + +/obj/machinery/replicator/clothing/tgui_interact(mob/user, datum/tgui/ui) //This creates the menu. + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "XenoarchReplicator_clothing_vr", name) //This is required to prevent UI contamination. + ui.open() + +/obj/machinery/replicator/clothing/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) //Gives data to the menu. + var/list/data = ..() + data["tgui_construction"] = tgui_vore_selection + return data + +/obj/machinery/replicator/clothing/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("construct") + var/key = params["key"] + if(key in created_items) + if(LAZYLEN(stored_materials) > LAZYLEN(spawning_types)) + if(LAZYLEN(spawning_types)) + visible_message("\icon[src][bicon(src)] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") + else + visible_message("\icon[src][bicon(src)] [src]'s front compartment slides shut.") + spawning_types.Add(created_items[key]) + spawn_progress_time = 0 + update_use_power(USE_POWER_ACTIVE) + icon_state = "borgcharger1(old)" + else + visible_message(fail_message) \ No newline at end of file diff --git a/code/modules/xenoarcheaology/effect.dm b/code/modules/xenoarcheaology/effect.dm index 145bd3e258..7409c8744f 100644 --- a/code/modules/xenoarcheaology/effect.dm +++ b/code/modules/xenoarcheaology/effect.dm @@ -92,7 +92,7 @@ var/atom/toplevelholder = target while(!istype(toplevelholder.loc, /turf)) toplevelholder = toplevelholder.loc - toplevelholder.visible_message("[bicon(toplevelholder)] [toplevelholder] [display_msg]") + toplevelholder.visible_message("\icon[toplevelholder][bicon(toplevelholder)] [toplevelholder] [display_msg]") /datum/artifact_effect/proc/DoEffectTouch(var/mob/user) /datum/artifact_effect/proc/DoEffectAura(var/atom/holder) @@ -158,7 +158,9 @@ /proc/GetAnomalySusceptibility(var/mob/living/carbon/human/H) if(!istype(H)) return 1 - if(istype(get_area(H),/area/crew_quarters/sleep)) return 0 //VOREStation Edit - Dorms are protected from anomalies + var/area/A = get_area(H) + if(A.forbid_events) + return 0 var/protected = 0 //anomaly suits give best protection, but excavation suits are almost as good diff --git a/code/modules/xenoarcheaology/finds/fossils.dm b/code/modules/xenoarcheaology/finds/fossils.dm index 19516f47cc..0ad06af468 100644 --- a/code/modules/xenoarcheaology/finds/fossils.dm +++ b/code/modules/xenoarcheaology/finds/fossils.dm @@ -77,7 +77,7 @@ ..() else if(istype(W,/obj/item/weapon/pen)) plaque_contents = sanitize(tgui_input_text(usr, "What would you like to write on the plaque:","Skeleton plaque","")) - user.visible_message("[user] writes something on the base of [src].","You relabel the plaque on the base of [bicon(src)] [src].") + user.visible_message("[user] writes something on the base of [src].","You relabel the plaque on the base of \icon[src][bicon(src)] [src].") if(src.contents.Find(/obj/item/weapon/fossil/skull/horned)) src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull. The plaque reads \'[plaque_contents]\'." else diff --git a/code/modules/xenoarcheaology/finds/special.dm b/code/modules/xenoarcheaology/finds/special.dm index 02a5096b98..f2dcfc5183 100644 --- a/code/modules/xenoarcheaology/finds/special.dm +++ b/code/modules/xenoarcheaology/finds/special.dm @@ -99,7 +99,7 @@ if(charges >= 0.1) if(prob(5)) - src.visible_message("[bicon(src)] [src]'s eyes glow ruby red for a moment!") + src.visible_message("\icon[src][bicon(src)] [src]'s eyes glow ruby red for a moment!") charges -= 0.1 //check on our shadow wights diff --git a/code/modules/xenoarcheaology/finds/talking.dm b/code/modules/xenoarcheaology/finds/talking.dm index 4a6af1444d..48b7720f00 100644 --- a/code/modules/xenoarcheaology/finds/talking.dm +++ b/code/modules/xenoarcheaology/finds/talking.dm @@ -54,7 +54,7 @@ var/list/options = list("[holder_atom] seems to be listening intently to [source]...",\ "[holder_atom] seems to be focusing on [source]...",\ "[holder_atom] seems to turn it's attention to [source]...") - holder_atom.loc.visible_message("[bicon(holder_atom)] [pick(options)]") + holder_atom.loc.visible_message("\icon[holder_atom][bicon(holder_atom)] [pick(options)]") if(prob(20)) spawn(2) @@ -118,5 +118,5 @@ listening|=M for(var/mob/M in listening) - to_chat(M, "[bicon(holder_atom)] [holder_atom] reverberates, \"[msg]\"") + to_chat(M, "\icon[holder_atom][bicon(holder_atom)] [holder_atom] reverberates, \"[msg]\"") last_talk_time = world.time diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm index 3c7b988211..a83462c43b 100644 --- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm +++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm @@ -67,7 +67,7 @@ /obj/item/weapon/anodevice/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + data["inserted_battery"] = inserted_battery data["anomaly"] = null data["charge"] = null @@ -103,7 +103,7 @@ if("startup") if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0)) activated = TRUE - visible_message("[bicon(src)] [src] whirrs.", "[bicon(src)]You hear something whirr.") + visible_message("\icon[src][bicon(src)] [src] whirrs.", "\icon[src][bicon(src)]You hear something whirr.") if(!inserted_battery.battery_effect.activated) inserted_battery.battery_effect.ToggleActivate(1) time_end = world.time + duration @@ -146,9 +146,9 @@ if(interval > 0) //apply the touch effect to the holder if(holder) - to_chat(holder, "the [bicon(src)] [src] held by [holder] shudders in your grasp.") + to_chat(holder, "the \icon[src][bicon(src)] [src] held by [holder] shudders in your grasp.") else - src.loc.visible_message("the [bicon(src)] [src] shudders.") + src.loc.visible_message("the \icon[src][bicon(src)] [src] shudders.") //consume power inserted_battery.use_power(energy_consumed_on_touch) @@ -175,13 +175,13 @@ //work out if we need to shutdown if(inserted_battery.stored_charge <= 0) - src.loc.visible_message("[bicon(src)] [src] buzzes.", "[bicon(src)] You hear something buzz.") + src.loc.visible_message("\icon[src][bicon(src)] [src] buzzes.", "\icon[src][bicon(src)] You hear something buzz.") shutdown_emission() else if(world.time > time_end) - src.loc.visible_message("[bicon(src)] [src] chimes.", "[bicon(src)] You hear something chime.") + src.loc.visible_message("\icon[src][bicon(src)] [src] chimes.", "\icon[src][bicon(src)] You hear something chime.") shutdown_emission() else - src.visible_message("[bicon(src)] [src] buzzes.", "[bicon(src)] You hear something buzz.") + src.visible_message("\icon[src][bicon(src)] [src] buzzes.", "\icon[src][bicon(src)] You hear something buzz.") shutdown_emission() last_process = world.time diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm index 32259e774a..6e0e1ceb19 100644 --- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm +++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm @@ -13,6 +13,14 @@ var/scan_duration = 50 var/obj/scanned_object var/report_num = 0 + var/list/priority_objects = list(/obj/machinery/artifact, + /obj/machinery/auto_cloner, + /obj/machinery/power/supermatter, + /obj/structure/constructshell, + /obj/machinery/giga_drill, + /obj/structure/cult/pylon, + /obj/machinery/replicator, + /obj/structure/crystal) /obj/machinery/artifact_analyser/Initialize() . = ..() @@ -49,9 +57,9 @@ /obj/machinery/artifact_analyser/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) if(..()) return TRUE - + add_fingerprint(usr) - + switch(action) if("scan") if(scan_in_progress) @@ -62,6 +70,7 @@ reconnect_scanner() if(owned_scanner) var/artifact_in_use = 0 + var/obj/secondary_priority for(var/obj/O in owned_scanner.loc) if(O == owned_scanner) continue @@ -78,13 +87,22 @@ if(artifact_in_use) atom_say("Cannot scan. Too much interference.") else - scanned_object = O - scan_in_progress = 1 - scan_completion_time = world.time + scan_duration - atom_say("Scanning begun.") - break + for(var/otype in priority_objects) + if(istype(O, otype)) + scanned_object = O + break + if(scanned_object) + break + else + secondary_priority = O + if(secondary_priority && !scanned_object) + scanned_object = secondary_priority if(!scanned_object) atom_say("Unable to isolate scan target.") + else + scan_in_progress = 1 + scan_completion_time = world.time + scan_duration + atom_say("Scanning begun.") return TRUE /obj/machinery/artifact_analyser/process() @@ -107,7 +125,7 @@ P.name = "[src] report #[++report_num]" P.info = "[src] analysis report #[report_num]
    " P.info += "
    " - P.info += "[bicon(scanned_object)] [results]" + P.info += "\icon[scanned_object][bicon(scanned_object)] [results]" P.stamped = list(/obj/item/weapon/stamp) P.add_overlay("paper_stamped") @@ -115,7 +133,7 @@ var/obj/machinery/artifact/A = scanned_object A.anchored = FALSE A.being_used = 0 - scanned_object = null + scanned_object = null //hardcoded responses, oh well /obj/machinery/artifact_analyser/proc/get_scan_info(var/obj/scanned_obj) diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm index dc634789bf..4ab22878c1 100644 --- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm +++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm @@ -126,7 +126,7 @@ /obj/machinery/radiocarbon_spectrometer/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + // this is the data which will be sent to the ui data["scanned_item"] = (scanned_item ? scanned_item.name : "") data["scanned_item_desc"] = (scanned_item ? (scanned_item.desc ? scanned_item.desc : "No information on record.") : "") @@ -268,16 +268,16 @@ //emergency stop if seal integrity reaches 0 if(scanner_seal_integrity <= 0 || (scanner_temperature >= 1273 && !rad_shield)) stop_scanning() - src.visible_message("[bicon(src)] buzzes unhappily. It has failed mid-scan!", 2) + src.visible_message("\icon[src][bicon(src)] buzzes unhappily. It has failed mid-scan!", 2) if(prob(5)) - src.visible_message("[bicon(src)] [pick("whirrs","chuffs","clicks")][pick(" excitedly"," energetically"," busily")].", 2) + src.visible_message("\icon[src][bicon(src)] [pick("whirrs","chuffs","clicks")][pick(" excitedly"," energetically"," busily")].", 2) else //gradually cool down over time if(scanner_temperature > 0) scanner_temperature = max(scanner_temperature - 5 - 10 * rand(), 0) if(prob(0.75)) - src.visible_message("[bicon(src)] [pick("plinks","hisses")][pick(" quietly"," softly"," sadly"," plaintively")].", 2) + src.visible_message("\icon[src][bicon(src)] [pick("plinks","hisses")][pick(" quietly"," softly"," sadly"," plaintively")].", 2) playsound(src, 'sound/effects/ding.ogg', 25) last_process_worldtime = world.time @@ -296,7 +296,7 @@ used_coolant = 0 /obj/machinery/radiocarbon_spectrometer/proc/complete_scan() - src.visible_message("[bicon(src)] makes an insistent chime.", 2) + src.visible_message("\icon[src][bicon(src)] makes an insistent chime.", 2) if(scanned_item) //create report diff --git a/code/modules/xenoarcheaology/tools/suspension_generator.dm b/code/modules/xenoarcheaology/tools/suspension_generator.dm index 2f2c87954e..902264308a 100644 --- a/code/modules/xenoarcheaology/tools/suspension_generator.dm +++ b/code/modules/xenoarcheaology/tools/suspension_generator.dm @@ -147,10 +147,10 @@ for(var/mob/living/M in T) M.Weaken(5) - M.visible_message("[bicon(M)] [M] begins to float in the air!","You feel tingly and light, but it is difficult to move.") + M.visible_message("\icon[M][bicon(M)] [M] begins to float in the air!","You feel tingly and light, but it is difficult to move.") suspension_field = new(T) - visible_message("[bicon(src)] [src] activates with a low hum.") + visible_message("\icon[src][bicon(src)] [src] activates with a low hum.") icon_state = "suspension3" for(var/obj/item/I in T) @@ -160,7 +160,7 @@ if(collected) suspension_field.icon_state = "energynet" suspension_field.add_overlay("shield2") - visible_message("[bicon(suspension_field)] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"].") + visible_message("\icon[suspension_field][bicon(suspension_field)] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"].") else if(istype(T,/turf/simulated/mineral) || istype(T,/turf/simulated/wall)) suspension_field.icon_state = "shieldsparkles" @@ -175,7 +175,7 @@ to_chat(M, "You no longer feel like floating.") M.Weaken(3) - visible_message("[bicon(src)] [src] deactivates with a gentle shudder.") + visible_message("\icon[src][bicon(src)] [src] deactivates with a gentle shudder.") qdel(suspension_field) suspension_field = null icon_state = "suspension2" diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm index 14bda53ca2..20c08c70ca 100644 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ b/code/modules/xenoarcheaology/tools/tools.dm @@ -131,7 +131,7 @@ positive_locations.Add(D) - to_chat(user, "[bicon(src)] [src] pings.") + to_chat(user, "\icon[src][bicon(src)] [src] pings.") else if(istype(A, /obj/structure/boulder)) var/obj/structure/boulder/B = A @@ -149,7 +149,7 @@ positive_locations.Add(D) - to_chat(user, "[bicon(src)] [src] pings [pick("madly","wildly","excitedly","crazily")]!") + to_chat(user, "\icon[src][bicon(src)] [src] pings [pick("madly","wildly","excitedly","crazily")]!") /obj/item/device/depth_scanner/attack_self(var/mob/living/user) tgui_interact(user) @@ -197,7 +197,7 @@ if(..()) return TRUE - switch(action) + switch(action) if("select") var/index = text2num(params["select"]) if(index && index <= LAZYLEN(positive_locations)) @@ -269,9 +269,9 @@ scan_ticks = 0 var/turf/T = get_turf(src) if(target_radio) - T.visible_message("[bicon(src)] [src] [pick("chirps","chirrups","cheeps")] happily.") + T.visible_message("\icon[src][bicon(src)] [src] [pick("chirps","chirrups","cheeps")] happily.") else - T.visible_message("[bicon(src)] [src] [pick("chirps","chirrups","cheeps")] sadly.") + T.visible_message("\icon[src][bicon(src)] [src] [pick("chirps","chirrups","cheeps")] sadly.") else icon_state = "pinoff" diff --git a/code/modules/xenobio/items/extracts.dm b/code/modules/xenobio/items/extracts.dm index 3a79e3b0ff..74c109f891 100644 --- a/code/modules/xenobio/items/extracts.dm +++ b/code/modules/xenobio/items/extracts.dm @@ -55,7 +55,7 @@ var/obj/item/slime_extract/T = holder.my_atom T.uses-- if(T.uses <= 0) - T.visible_message("[bicon(T)]\The [T] goes inert.") + T.visible_message("\icon[T][bicon(T)]\The [T] goes inert.") T.name = "inert [initial(T.name)]" diff --git a/code/modules/xenobio/items/extracts_vr.dm b/code/modules/xenobio/items/extracts_vr.dm index e925544ea2..9ea649a136 100644 --- a/code/modules/xenobio/items/extracts_vr.dm +++ b/code/modules/xenobio/items/extracts_vr.dm @@ -60,7 +60,7 @@ var/obj/item/slime_extract/T = holder.my_atom T.uses-- if(T.uses <= 0) - T.visible_message("[bicon(T)]\The [T] goes inert.") + T.visible_message("\icon[T][bicon(T)]\The [T] goes inert.") T.name = "inert [initial(T.name)]" diff --git a/code/modules/xenobio2/machinery/core_extractor.dm b/code/modules/xenobio2/machinery/core_extractor.dm index 4a6b8651e2..e2882001e1 100644 --- a/code/modules/xenobio2/machinery/core_extractor.dm +++ b/code/modules/xenobio2/machinery/core_extractor.dm @@ -93,7 +93,7 @@ /obj/machinery/slime/extractor/proc/extract_cores() if(!src.occupant) - src.visible_message("[bicon(src)] [src] pings unhappily.") + src.visible_message("\icon[src][bicon(src)] [src] pings unhappily.") else if(inuse) return diff --git a/code/modules/xenobio2/machinery/gene_manipulators.dm b/code/modules/xenobio2/machinery/gene_manipulators.dm index c896f14309..b8e5cfc616 100644 --- a/code/modules/xenobio2/machinery/gene_manipulators.dm +++ b/code/modules/xenobio2/machinery/gene_manipulators.dm @@ -102,15 +102,15 @@ in_use = 0 if(failed_task) failed_task = 0 - visible_message("[bicon(src)] [src] pings unhappily, flashing a red warning light.") + visible_message("\icon[src][bicon(src)] [src] pings unhappily, flashing a red warning light.") else - visible_message("[bicon(src)] [src] pings happily.") + visible_message("\icon[src][bicon(src)] [src] pings happily.") if(eject_disk) eject_disk = 0 if(loaded_disk) loaded_disk.forceMove(get_turf(src)) - visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null /obj/machinery/xenobio/extractor @@ -126,7 +126,7 @@ /obj/machinery/xenobio/extractor/Initialize() . = ..() default_apply_parts() - + /obj/machinery/xenobio/extractor/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/xenoproduct)) if(product) @@ -183,7 +183,7 @@ /obj/machinery/xenobio/proc/eject_disk() if(!loaded_disk) return loaded_disk.forceMove(loc) - visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null /obj/machinery/xenobio/extractor/Topic(href, href_list) @@ -195,7 +195,7 @@ if(!product) return product.forceMove(get_turf(src)) - visible_message("[bicon(src)] [src] beeps and spits out [product].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [product].") product = null if(href_list["eject_disk"]) diff --git a/code/modules/xenobio2/machinery/slime_replicator.dm b/code/modules/xenobio2/machinery/slime_replicator.dm index f845ad6e8d..30c3e372a5 100644 --- a/code/modules/xenobio2/machinery/slime_replicator.dm +++ b/code/modules/xenobio2/machinery/slime_replicator.dm @@ -57,7 +57,7 @@ /obj/machinery/slime/replicator/proc/replicate_slime() if(!src.core) - src.visible_message("[bicon(src)] [src] pings unhappily.") + src.visible_message("\icon[src][bicon(src)] [src] pings unhappily.") else if(inuse) return diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm index 6dfec2bd60..e988835fc4 100644 --- a/code/unit_tests/map_tests.dm +++ b/code/unit_tests/map_tests.dm @@ -1,5 +1,5 @@ /datum/unit_test/apc_area_test - name = "MAP: Area Test APC / Scrubbers / Vents Z level 1" + name = "MAP: Area Test APC / Scrubbers / Vents (Defined Z-Levels)" /datum/unit_test/apc_area_test/start_test() var/list/bad_areas = list() @@ -47,17 +47,16 @@ var/area_good = 1 var/bad_msg = "--------------- [A.name]([A.type])" - if(isnull(A.apc) && !(A.type in exempt_from_apc)) - log_unit_test("[bad_msg] lacks an APC.") + log_unit_test("[bad_msg] lacks an APC. (X[A.x]|Y[A.y]) - Z[A.z])") area_good = 0 if(!A.air_scrub_info.len && !(A.type in exempt_from_atmos)) - log_unit_test("[bad_msg] lacks an Air scrubber.") + log_unit_test("[bad_msg] lacks an Air scrubber. (X[A.x]|Y[A.y]) - (Z[A.z])") area_good = 0 if(!A.air_vent_info.len && !(A.type in exempt_from_atmos)) - log_unit_test("[bad_msg] lacks an Air vent.") + log_unit_test("[bad_msg] lacks an Air vent. (X[A.x]|Y[A.y]) - (Z[A.z])") area_good = 0 if(!area_good) @@ -71,9 +70,11 @@ return 1 /datum/unit_test/wire_test - name = "MAP: Cable Test Z level 1" + name = "MAP: Cable Test (Defined Z-Levels)" /datum/unit_test/wire_test/start_test() + set background=1 + var/wire_test_count = 0 var/bad_tests = 0 var/turf/T = null @@ -81,23 +82,35 @@ var/list/cable_turfs = list() var/list/dirs_checked = list() - for(C in world) - T = null + var/list/exempt_from_wires = list() + exempt_from_wires += using_map.unit_test_exempt_from_wires.Copy() - T = get_turf(C) - if(T && T.z == 1) - cable_turfs |= get_turf(C) + var/list/zs_to_test = using_map.unit_test_z_levels || list(1) //Either you set it, or you just get z1 - for(T in cable_turfs) - var/bad_msg = "--------------- [T.name] \[[T.x] / [T.y] / [T.z]\]" - dirs_checked.Cut() - for(C in T) - wire_test_count++ - var/combined_dir = "[C.d1]-[C.d2]" - if(combined_dir in dirs_checked) - bad_tests++ - log_unit_test("[bad_msg] Contains multiple wires with same direction on top of each other.") - dirs_checked.Add(combined_dir) + for(var/color in possible_cable_coil_colours) + cable_turfs = list() + + for(C in world) + T = null + + T = get_turf(C) + var/area/A = get_area(T) + if(T && (T.z in zs_to_test) && !(A.type in exempt_from_wires)) + if(C.color == possible_cable_coil_colours[color]) + cable_turfs |= get_turf(C) + + for(T in cable_turfs) + var/bad_msg = "--------------- [T.name] \[[T.x] / [T.y] / [T.z]\] [color]" + dirs_checked.Cut() + for(C in T) + wire_test_count++ + var/combined_dir = "[C.d1]-[C.d2]" + if(combined_dir in dirs_checked) + bad_tests++ + log_unit_test("[bad_msg] Contains multiple wires with same direction on top of each other.") + dirs_checked.Add(combined_dir) + + log_unit_test("[color] wires checked.") if(bad_tests) fail("\[[bad_tests] / [wire_test_count]\] Some turfs had overlapping wires going the same direction.") @@ -121,12 +134,12 @@ var/a_gas = "" for(var/gas in E.A.air.gas) a_gas += "[gas]=[E.A.air.gas[gas]]" - + var/b_temp var/b_moles var/b_vol var/b_gas = "" - + // Two zones mixing if(istype(E, /connection_edge/zone)) var/connection_edge/zone/Z = E @@ -144,11 +157,11 @@ b_vol = "Unsim" for(var/gas in U.air.gas) b_gas += "[gas]=[U.air.gas[gas]]" - + edge_log += "Active Edge [E] ([E.type])" edge_log += "Edge side A: T:[a_temp], Mol:[a_moles], Vol:[a_vol], Gas:[a_gas]" edge_log += "Edge side B: T:[b_temp], Mol:[b_moles], Vol:[b_vol], Gas:[b_gas]" - + for(var/turf/T in E.connecting_turfs) edge_log += "+--- Connecting Turf [T] ([T.type]) @ [T.x], [T.y], [T.z] ([T.loc])" diff --git a/config/.gitignore b/config/.gitignore index 0367235fe4..6a44a39905 100644 --- a/config/.gitignore +++ b/config/.gitignore @@ -2,8 +2,4 @@ * !*/ #Also don't ignore these things because editing them manually on the server is a pain in the fucking ass. -#!custom_items.txt -#!custom_sprites.txt -#!alienwhitelist.txt -#!jobwhitelist.txt -#!jukebox.json +!jukebox.json diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index c423c19e38..86bed07082 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -32,7 +32,6 @@ pearlprophet - Protean phoenixx0 - Vox rapidvalj - Vox rapidvalj - Common Skrellian -rapidvalj - High Skrellian rikaru19xjenkins - Xenochimera rixunie - Diona rykkastormheart - Xenochimera @@ -48,7 +47,6 @@ storesund97 - Protean sharplight - Protean tastypred - Black-Eyed Shadekin tastypred - Xenochimera -tastypred - Protean timidvi - Diona varonis - Xenochimera verkister - Xenochimera diff --git a/config/custom_sprites.txt b/config/custom_sprites.txt index dc5302cb7f..18fd6b4b0f 100644 --- a/config/custom_sprites.txt +++ b/config/custom_sprites.txt @@ -1,3 +1,3 @@ -ckey|state -lunarfleet|Clea-Nor -jademanique|B.A.U-Kingside +ckey|state +lunarfleet|Clea-Nor +jademanique|B.A.U-Kingside diff --git a/config/jukebox.json b/config/jukebox.json index e01e042eb6..340cdc080d 100644 --- a/config/jukebox.json +++ b/config/jukebox.json @@ -1,28 +1,28 @@ [ { -"url": "https://s.put.re/bkZYkYwX.mp3", +"url": "https://files.catbox.moe/notc7y.mp3", "title": "Flip-Flap (Title One)", "duration": 1500, "artist": "X-CEED", "secret": false, "lobby": false, -"jukebox": false, +"jukebox": true, "genre": "Jazz" }, { -"url": "https://s.put.re/EzLP21Mp.mp3", +"url": "https://files.catbox.moe/b24m07.mp3", "title": "Robocop Theme (Title Two)", "duration": 1180, "artist": "Cboyardee", "secret": false, "lobby": false, -"jukebox": false, +"jukebox": true, "genre": "Electronic" }, { -"url": "https://s.put.re/uDpZrL1L.mp3", +"url": "https://files.catbox.moe/qn5tdv.mp3", "title": "Tin Tin on the Moon (Remix)", -"duration": 2320, +"duration": 2450, "artist": "Jeroen Tel (Remixed by Cuboos)", "secret": false, "lobby": false, @@ -30,7 +30,7 @@ "genre": "Electronic" }, { -"url": "https://s.put.re/nNXTd9ko.mp3", +"url": "https://files.catbox.moe/uk3pr2.mp3", "title": "Phoron Will Make Us Rich", "duration": 1370, "artist": "Earthcrusher", @@ -40,9 +40,9 @@ "genre": "Electronic" }, { -"url": "https://s.put.re/vrN9ATH7.mp3", +"url": "https://files.catbox.moe/k25nxo.mp3", "title": "Spaceman's Dilemma", -"duration": 2230, +"duration": 2080, "artist": "Leslie Fish", "secret": false, "lobby": false, @@ -3949,5 +3949,742 @@ "lobby": false, "jukebox": true, "genre": "Electronic" +}, +{ +"duration" : 1800, +"url" : "https://files.catbox.moe/ewn2u4.mp3", +"title" : "Disco Descent", +"artist" : "Danny Baranowsky", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Electronic" +}, +{ +"duration" : 1130, +"url" : "https://files.catbox.moe/8rns1d.mp3", +"title" : "Konga Conga Kappa", +"artist" : "Danny Baranowsky", +"secret": false, +"lobby": false, +"jukebox": true, +"genre": "Electronic" +}, +{ +"url": "https://files.catbox.moe/3h38kn.mp3", +"title": "Among Us", +"duration": 720, +"genre": "Disco, Funk, Soul, and R&B", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/rqhxj1.mp3", +"title": "Leggy Zone", +"duration": 1470, +"genre": "Electronic", +"secret": true, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/e6l6mw.mp3", +"title": "Shop Theme", +"duration": 8910, +"genre": "Electronic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/q2ob3n.mp3", +"title": "PONPONPON", +"duration": 2430, +"artist": "Kyary Pamyu Pamyu", +"genre": "J-Pop", +"secret": false, +"lobby": false +}, +{ +"url": "https://files.catbox.moe/o8flhu.mp3", +"title": "Man's Road", +"duration": 2060, +"artist": "America", +"genre": "Rock", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/0gb5qs.mp3", +"title": "Passionflower", +"duration": 3840, +"artist": "Jon Gomm", +"genre": "Rock", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/p5e28z.mp3", +"title": "What the Fuck", +"duration": 2420, +"artist": "Koh", +"genre": "Folk and Indie", +"secret": true, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/0f2xma.mp3", +"title": "Bonetrousle", +"duration": 580, +"artist": "Toby Fox", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/6ivc7w.mp3", +"title": "Bury the Light", +"duration": 5830, +"artist": "Victor Borba & Casey Edwards", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/pbtbjv.mp3", +"title": "Dog Song", +"duration": 380, +"artist": "Toby Fox", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/4v3eeb.mp3", +"title": "Anticipation", +"duration": 230, +"artist": "Toby Fox", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/0q8ch6.mp3", +"title": "Smash Clown", +"duration": 820, +"artist": "Goat", +"genre": "Space", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/ygcg2e.mp3", +"title": "Honk The Police", +"duration": 590, +"artist": "Goat", +"genre": "Space", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/h0yswi.mp3", +"title": "Cargonia", +"duration": 630, +"artist": "Goat", +"genre": "Space", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/xg76ja.mp3", +"title": "Hail Cargonia", +"duration": 980, +"artist": "Goat", +"genre": "Space", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/tbr2rc.mp3", +"title": "Banned From Cargo", +"duration": 2450, +"artist": "Goat", +"genre": "Space", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/tw2et2.mp3", +"title": "Periphery Dixie", +"duration": 1200, +"artist": "Goat", +"genre": "Space", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/rm5hcs.mp3", +"title": "Cargonia (cover)", +"duration": 2730, +"artist": "Dadbot5000", +"genre": "Space", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/ybfof9.mp3", +"title": "The Legend", +"duration": 1120, +"artist": "Toby Fox", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/ugfx06.mp3", +"title": "Field of Hopes and Dreams", +"duration": 1610, +"artist": "Toby Fox", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/wr08om.mp3", +"title": "Checker Dance", +"duration": 780, +"artist": "Toby Fox", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/4au954.mp3", +"title": "Vs Susie", +"duration": 810, +"artist": "Toby Fox", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/c9y5x2.mp3", +"title": "Golden Wind", +"duration": 2930, +"artist": "Yugo Kanno", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/ymvtem.mp3", +"title": "Sono Chi no Sadame", +"duration": 2610, +"artist": "Hiroaki TOMMY Tominaga", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/z73u05.mp3", +"title": "Bloody Stream", +"duration": 2590, +"artist": "Coda", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/yg3643.mp3", +"title": "Stand Proud", +"duration": 2750, +"artist": "Jin Hashimoto", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/344qrf.mp3", +"title": "Sono Chi no Kioku ~end of THE WORLD~", +"duration": 2620, +"artist": "JO☆STARS", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/0n6y6v.mp3", +"title": "Crazy Noisy Bizarre Town", +"duration": 1840, +"artist": "THE DU", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/j3xzw6.mp3", +"title": "Chase", +"duration": 1450, +"artist": "Batta", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/luf1bh.mp3", +"title": "Great Days", +"duration": 2400, +"artist": "Karen Aoki & Daisuke Hasegaw", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/ytp4d2.mp3", +"title": "Fighting Gold", +"duration": 2540, +"artist": "Coda", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/q1xjdp.mp3", +"title": "I Want It That Way", +"duration": 2120, +"artist": "Backstreet Boys", +"genre": "Pop", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/pxpkat.mp3", +"title": "Shop Theme Cover", +"duration": 1770, +"artist": "Songe", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/nz03o1.mp3", +"title": "Deep Space 9 (Cover)", +"duration": 1220, +"artist": "Heropoint", +"genre": "Rock", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/n4vcnq.mp3", +"title": "Trouble Shooting Star", +"duration": 1460, +"artist": "", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/byy378.mp3", +"title": "The Lord of the Rings The Fellowship of the its my book they will walk if I tell them to", +"duration": 970, +"artist": "Tom Cardy", +"genre": "Folk and Indie", +"secret": true, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/akgbup.mp3", +"title": "Flight of the Bumblebee", +"duration": 2050, +"artist": "Rimsky Korsakov", +"genre": "Classical and Orchestral", +"secret": true, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/milk8o.mp3", +"title": "As Heaven Is Wide", +"duration": 2880, +"artist": "Garbage", +"genre": "Rock", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/8mh82l.mp3", +"title": "Combat Montage", +"duration": 1410, +"artist": "Kevin Manthei", +"genre": "Rock", +"secret": true, +"lobby": false, +"jukebox": true +}, + +{ +"url": "https://files.catbox.moe/qa6ahi.mp3", +"title": "Deadlines", +"duration": 1570, +"artist": "Network Music Ensemble", +"genre": "Rock", +"secret": false, +"lobby": true, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/cdmm5k.mp3", +"title": "Holding Out For A Hero", +"duration": 2620, +"artist": "Ella Mae Bowen", +"genre": "Country and Western", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/jlv9eb.mp3", +"title": "Jiko Bunseki", +"duration": 1420, +"artist": "Yuki Hayashi", +"genre": "Anime", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/vzbcsc.mp3", +"title": "Let It End", +"duration": 2220, +"artist": "Karliene", +"genre": "Folk and Indie", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/nsfwxe.mp3", +"title": "Proof Of A Hero (16 bit)", +"duration": 1410, +"artist": "Bulby", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/ywoaqa.mp3", +"title": "Proof Of A Hero", +"duration": 1340, +"artist": "Kouda Masato", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/xlrbbe.mp3", +"title": "Pure Imagination", +"duration": 2060, +"artist": "Fiona Apple", +"genre": "Electronic", +"secret": false, +"lobby": true, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/q3f6sq.mp3", +"title": "Rhapsody In Blue", +"duration": 9870, +"artist": "Kamil Hala, Slovak Philharmonic Orchestra, Libor Pešek", +"genre": "Classical and Orchestral", +"secret": false, +"lobby": true, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/vzsm5k.mp3", +"title": "Surface Of SR388", +"duration": 1710, +"artist": "BG Ollie", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/ngtv3e.mp3", +"title": "Where My Heart Will Take Me", +"duration": 0, +"artist": "Russell Watson", +"genre": "Country and Western", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/cfq7bo.mp3", +"title": "Kiss From A Rose", +"duration": 2860, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/4mypzc.mp3", +"title": "Black Hole Sun", +"duration": 3210, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/qpkv1q.mp3", +"title": "I Still Haven't Found What I'm Looking For", +"duration": 2870, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/g8vawq.mp3", +"title": "Nights In White Satin", +"duration": 2710, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/01ljjx.mp3", +"title": "Land Of Confusion", +"duration": 2850, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/2iugx4.mp3", +"title": "Aspirations", +"duration": 3010, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/m3cwu1.mp3", +"title": "Head Over Heels", +"duration": 2420, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/xtizlg.mp3", +"title": "Get Lucky", +"duration": 2490, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/dym0sp.mp3", +"title": "God Only Knows", +"duration": 1810, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/i8gml0.mp3", +"title": "Scarborough Fair", +"duration": 2020, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/chc70l.mp3", +"title": "The Sphere A Kind Of Dream", +"duration": 620, +"artist": "Dan Avidan & Super Guitar Bros", +"genre": "Acoustic", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/w48oqv.mp3", +"title": "Pushin' The Speed of Light", +"duration": 2130, +"artist": "Julia Ecklar & Anne Prather", +"genre": "Folk and Indie", +"secret": false, +"lobby": true, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/zacsky.mp3", +"title": "S.T.L.", +"duration": 1190, +"artist": "Free Fall & Other Delights", +"genre": "Folk and Indie", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/9a3ow3.mp3", +"title": "Phantom Lover of the Star Drive", +"duration": 1930, +"artist": "Free Fall & Other Delights", +"genre": "Folk and Indie", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/eo59pv.mp3", +"title": "Molecular Clouds", +"duration": 1560, +"artist": "Free Fall & Other Delights", +"genre": "Folk and Indie", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/227jw9.mp3", +"title": "A Reconsideration (Zero-G Sex)", +"duration": 2530, +"artist": "Free Fall & Other Delights", +"genre": "Folk and Indie", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/yvn8bu.mp3", +"title": "Stuck Here", +"duration": 1360, +"artist": "Free Fall & Other Delights", +"genre": "Folk and Indie", +"secret": false, +"lobby": true, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/nsnf73.mp3", +"title": "The Ballad of Transport 18", +"duration": 2660, +"artist": "Leslie Fish", +"genre": "Folk and Indie", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/hwsbsi.mp3", +"title": "Don't Push That Button", +"duration": 2450, +"artist": "Duane Elms", +"genre": "Folk and Indie", +"secret": false, +"lobby": true, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/iizfw9.mp3", +"title": "Late Night at the Draco Tavern", +"duration": 2600, +"artist": "Duane Elms", +"genre": "Folk and Indie", +"secret": false, +"lobby": true, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/4zaljk.mp3", +"title": "Startide Rising", +"duration": 1050, +"artist": "Duane Elms", +"genre": "Folk and Indie", +"secret": false, +"lobby": true, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/9y01ry.mp3", +"title": "F.A.P. Feline American Princess", +"duration": 2640, +"artist": "Leslie Fish", +"genre": "Folk and Indie", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ +"url": "https://files.catbox.moe/s7u3vi.mp3", +"title": "Hymn to Breaking Strain", +"duration": 2710, +"artist": "Julia Ecklar & Leslie Fish", +"genre": "Folk and Indie", +"secret": false, +"lobby": false, +"jukebox": true } ] diff --git a/icons/_nanomaps/southern_cross_nanomap_z1.png b/icons/_nanomaps/southern_cross_nanomap_z1.png index 5b42d1a6bf..fadd28df77 100644 Binary files a/icons/_nanomaps/southern_cross_nanomap_z1.png and b/icons/_nanomaps/southern_cross_nanomap_z1.png differ diff --git a/icons/_nanomaps/southern_cross_nanomap_z2.png b/icons/_nanomaps/southern_cross_nanomap_z2.png index 18e63cf11b..7545a6559a 100644 Binary files a/icons/_nanomaps/southern_cross_nanomap_z2.png and b/icons/_nanomaps/southern_cross_nanomap_z2.png differ diff --git a/icons/_nanomaps/southern_cross_nanomap_z3.png b/icons/_nanomaps/southern_cross_nanomap_z3.png index 047f9b3cde..f609628e54 100644 Binary files a/icons/_nanomaps/southern_cross_nanomap_z3.png and b/icons/_nanomaps/southern_cross_nanomap_z3.png differ diff --git a/icons/_nanomaps/southern_cross_nanomap_z5.png b/icons/_nanomaps/southern_cross_nanomap_z5.png index e8876cc15f..e3ca9e3d8e 100644 Binary files a/icons/_nanomaps/southern_cross_nanomap_z5.png and b/icons/_nanomaps/southern_cross_nanomap_z5.png differ diff --git a/icons/_nanomaps/southern_cross_nanomap_z6.png b/icons/_nanomaps/southern_cross_nanomap_z6.png index 0ad40389cb..ff31a864c8 100644 Binary files a/icons/_nanomaps/southern_cross_nanomap_z6.png and b/icons/_nanomaps/southern_cross_nanomap_z6.png differ diff --git a/icons/_nanomaps/southern_cross_nanomap_z7.png b/icons/_nanomaps/southern_cross_nanomap_z7.png index d639e0241b..1cff511cba 100644 Binary files a/icons/_nanomaps/southern_cross_nanomap_z7.png and b/icons/_nanomaps/southern_cross_nanomap_z7.png differ diff --git a/icons/inventory/accessory/item_vr.dmi b/icons/inventory/accessory/item_vr.dmi index b1e6a60a0e..91e3c4e7d6 100644 Binary files a/icons/inventory/accessory/item_vr.dmi and b/icons/inventory/accessory/item_vr.dmi differ diff --git a/icons/inventory/accessory/mob_vr.dmi b/icons/inventory/accessory/mob_vr.dmi index cab7916a32..a738336ba1 100644 Binary files a/icons/inventory/accessory/mob_vr.dmi and b/icons/inventory/accessory/mob_vr.dmi differ diff --git a/icons/inventory/head/item_vr.dmi b/icons/inventory/head/item_vr.dmi index 54a988a2b7..d8e7dbd97f 100644 Binary files a/icons/inventory/head/item_vr.dmi and b/icons/inventory/head/item_vr.dmi differ diff --git a/icons/inventory/head/item_vr_altevian.dmi b/icons/inventory/head/item_vr_altevian.dmi new file mode 100644 index 0000000000..acedeb864c Binary files /dev/null and b/icons/inventory/head/item_vr_altevian.dmi differ diff --git a/icons/inventory/head/mob_vr.dmi b/icons/inventory/head/mob_vr.dmi index 2c417cdd25..2da016ca45 100644 Binary files a/icons/inventory/head/mob_vr.dmi and b/icons/inventory/head/mob_vr.dmi differ diff --git a/icons/inventory/head/mob_vr_altevian.dmi b/icons/inventory/head/mob_vr_altevian.dmi new file mode 100644 index 0000000000..cdd6fe581a Binary files /dev/null and b/icons/inventory/head/mob_vr_altevian.dmi differ diff --git a/icons/inventory/suit/item.dmi b/icons/inventory/suit/item.dmi index 018fd23935..81ec437202 100644 Binary files a/icons/inventory/suit/item.dmi and b/icons/inventory/suit/item.dmi differ diff --git a/icons/inventory/suit/item_vr.dmi b/icons/inventory/suit/item_vr.dmi index 806c8a021a..fb17453b3c 100644 Binary files a/icons/inventory/suit/item_vr.dmi and b/icons/inventory/suit/item_vr.dmi differ diff --git a/icons/inventory/suit/item_vr_altevian.dmi b/icons/inventory/suit/item_vr_altevian.dmi new file mode 100644 index 0000000000..a3aa3a0e69 Binary files /dev/null and b/icons/inventory/suit/item_vr_altevian.dmi differ diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi index eed3749711..0e4a4ba3e1 100644 Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ diff --git a/icons/inventory/suit/mob_vr.dmi b/icons/inventory/suit/mob_vr.dmi index c97f407958..eb19cb108c 100644 Binary files a/icons/inventory/suit/mob_vr.dmi and b/icons/inventory/suit/mob_vr.dmi differ diff --git a/icons/inventory/suit/mob_vr_altevian.dmi b/icons/inventory/suit/mob_vr_altevian.dmi new file mode 100644 index 0000000000..8afd7064fa Binary files /dev/null and b/icons/inventory/suit/mob_vr_altevian.dmi differ diff --git a/icons/inventory/uniform/item_vr.dmi b/icons/inventory/uniform/item_vr.dmi index 4e92cd6710..305bdc3efb 100644 Binary files a/icons/inventory/uniform/item_vr.dmi and b/icons/inventory/uniform/item_vr.dmi differ diff --git a/icons/inventory/uniform/mob.dmi b/icons/inventory/uniform/mob.dmi index 607a315377..d368c3a4d7 100644 Binary files a/icons/inventory/uniform/mob.dmi and b/icons/inventory/uniform/mob.dmi differ diff --git a/icons/inventory/uniform/mob_vr.dmi b/icons/inventory/uniform/mob_vr.dmi index e4295298d3..f04df19f3e 100644 Binary files a/icons/inventory/uniform/mob_vr.dmi and b/icons/inventory/uniform/mob_vr.dmi differ diff --git a/icons/mob/animal_vr.dmi b/icons/mob/animal_vr.dmi index 87b050acbc..75edbf2629 100644 Binary files a/icons/mob/animal_vr.dmi and b/icons/mob/animal_vr.dmi differ diff --git a/icons/mob/custom_synthetic_vr.dmi b/icons/mob/custom_synthetic_vr.dmi index 8c9cd318f7..efd3e24386 100644 Binary files a/icons/mob/custom_synthetic_vr.dmi and b/icons/mob/custom_synthetic_vr.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/DSIFennec/dsi_fennec.dmi b/icons/mob/human_races/cyberlimbs/DSIFennec/dsi_fennec.dmi new file mode 100644 index 0000000000..7823146b3a Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/DSIFennec/dsi_fennec.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/DSIZorren/dsi_zorren.dmi b/icons/mob/human_races/cyberlimbs/DSIZorren/dsi_zorren.dmi new file mode 100644 index 0000000000..c2b46c5b60 Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/DSIZorren/dsi_zorren.dmi differ diff --git a/icons/mob/human_races/markings_ch.dmi b/icons/mob/human_races/markings_ch.dmi index 06017c48ec..5cc3d842c4 100644 Binary files a/icons/mob/human_races/markings_ch.dmi and b/icons/mob/human_races/markings_ch.dmi differ diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi index 6a96c24689..ee1c196b37 100644 Binary files a/icons/mob/human_races/markings_vr.dmi and b/icons/mob/human_races/markings_vr.dmi differ diff --git a/icons/mob/human_races/r_altevian.dmi b/icons/mob/human_races/r_altevian.dmi new file mode 100644 index 0000000000..66822d745a Binary files /dev/null and b/icons/mob/human_races/r_altevian.dmi differ diff --git a/icons/mob/human_races/r_def_altevian.dmi b/icons/mob/human_races/r_def_altevian.dmi new file mode 100644 index 0000000000..66822d745a Binary files /dev/null and b/icons/mob/human_races/r_def_altevian.dmi differ diff --git a/icons/mob/items/lefthand_guns_vr.dmi b/icons/mob/items/lefthand_guns_vr.dmi index f2c51e21b9..20261bbbe1 100644 Binary files a/icons/mob/items/lefthand_guns_vr.dmi and b/icons/mob/items/lefthand_guns_vr.dmi differ diff --git a/icons/mob/items/righthand_guns_vr.dmi b/icons/mob/items/righthand_guns_vr.dmi index 7e899b2b99..f39b901489 100644 Binary files a/icons/mob/items/righthand_guns_vr.dmi and b/icons/mob/items/righthand_guns_vr.dmi differ diff --git a/icons/mob/pai_vr.dmi b/icons/mob/pai_vr.dmi index 859cfc7116..82f5faffe8 100644 Binary files a/icons/mob/pai_vr.dmi and b/icons/mob/pai_vr.dmi differ diff --git a/icons/mob/pai_vr32x64.dmi b/icons/mob/pai_vr32x64.dmi new file mode 100644 index 0000000000..02c15d3de8 Binary files /dev/null and b/icons/mob/pai_vr32x64.dmi differ diff --git a/icons/mob/pai_vr64x32.dmi b/icons/mob/pai_vr64x32.dmi new file mode 100644 index 0000000000..468e5cd216 Binary files /dev/null and b/icons/mob/pai_vr64x32.dmi differ diff --git a/icons/mob/pai_vr64x64.dmi b/icons/mob/pai_vr64x64.dmi index d19f5137df..d9840c659e 100644 Binary files a/icons/mob/pai_vr64x64.dmi and b/icons/mob/pai_vr64x64.dmi differ diff --git a/icons/mob/vore/Bellies.dmi b/icons/mob/vore/Bellies.dmi new file mode 100644 index 0000000000..4f0d94f008 Binary files /dev/null and b/icons/mob/vore/Bellies.dmi differ diff --git a/icons/mob/vore/Taur_Bellies.dmi b/icons/mob/vore/Taur_Bellies.dmi new file mode 100644 index 0000000000..ce4b1313f8 Binary files /dev/null and b/icons/mob/vore/Taur_Bellies.dmi differ diff --git a/icons/mob/vore/ears_vr.dmi b/icons/mob/vore/ears_vr.dmi index 4bde02b8bf..427f1fb7b7 100644 Binary files a/icons/mob/vore/ears_vr.dmi and b/icons/mob/vore/ears_vr.dmi differ diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index d5a4d7ad57..1b2e946079 100644 Binary files a/icons/mob/vore/tails_vr.dmi and b/icons/mob/vore/tails_vr.dmi differ diff --git a/icons/mob/vore/taurs_ch.dmi b/icons/mob/vore/taurs_ch.dmi index 3ad64c7570..7e8e01283f 100644 Binary files a/icons/mob/vore/taurs_ch.dmi and b/icons/mob/vore/taurs_ch.dmi differ diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi index 20ddaee2a4..8ae4803803 100644 Binary files a/icons/mob/vore/taurs_vr.dmi and b/icons/mob/vore/taurs_vr.dmi differ diff --git a/icons/mob/widerobot_trauma_vr.dmi b/icons/mob/widerobot_trauma_vr.dmi new file mode 100644 index 0000000000..c5694be909 Binary files /dev/null and b/icons/mob/widerobot_trauma_vr.dmi differ diff --git a/icons/obj/boxes.dmi b/icons/obj/boxes.dmi index 7978b9a564..948cb472da 100644 Binary files a/icons/obj/boxes.dmi and b/icons/obj/boxes.dmi differ diff --git a/icons/obj/casino.dmi b/icons/obj/casino.dmi new file mode 100644 index 0000000000..6a1bfda2ea Binary files /dev/null and b/icons/obj/casino.dmi differ diff --git a/icons/obj/gun_toy.dmi b/icons/obj/gun_toy.dmi index bee6bcc49d..738911bcd6 100644 Binary files a/icons/obj/gun_toy.dmi and b/icons/obj/gun_toy.dmi differ diff --git a/icons/obj/lighting32x64.dmi b/icons/obj/lighting32x64.dmi index 1fe0dc024b..36ccfb03fe 100644 Binary files a/icons/obj/lighting32x64.dmi and b/icons/obj/lighting32x64.dmi differ diff --git a/icons/obj/lighting_vr.dmi b/icons/obj/lighting_vr.dmi index e6e27c57a4..293cedfdc7 100644 Binary files a/icons/obj/lighting_vr.dmi and b/icons/obj/lighting_vr.dmi differ diff --git a/icons/obj/mouseray.dmi b/icons/obj/mouseray.dmi new file mode 100644 index 0000000000..fdb4d9bb90 Binary files /dev/null and b/icons/obj/mouseray.dmi differ diff --git a/icons/obj/nanomods.dmi b/icons/obj/nanomods.dmi index 7068034dad..f957c63983 100644 Binary files a/icons/obj/nanomods.dmi and b/icons/obj/nanomods.dmi differ diff --git a/icons/obj/overmap.dmi b/icons/obj/overmap.dmi index cef405461a..c4dd9c4232 100644 Binary files a/icons/obj/overmap.dmi and b/icons/obj/overmap.dmi differ diff --git a/icons/obj/paicard.dmi b/icons/obj/paicard.dmi index c69ead6efd..4403d47a3d 100644 Binary files a/icons/obj/paicard.dmi and b/icons/obj/paicard.dmi differ diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi index f98d60b5bd..29bee45a9f 100644 Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ diff --git a/icons/obj/tools_vr.dmi b/icons/obj/tools_vr.dmi index 05de9a423a..576d69cfab 100644 Binary files a/icons/obj/tools_vr.dmi and b/icons/obj/tools_vr.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 174275907e..9e7e9b04f7 100644 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/icons/turf/flooring/carpet.dmi b/icons/turf/flooring/carpet.dmi index f7dcf3c046..9e3472fcbf 100644 Binary files a/icons/turf/flooring/carpet.dmi and b/icons/turf/flooring/carpet.dmi differ diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index cc7b242670..78fa46a05c 100644 Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 1f3fb6cea7..76707a55fb 100644 Binary files a/icons/vore/custom_items_vr.dmi and b/icons/vore/custom_items_vr.dmi differ diff --git a/maps/expedition_vr/aerostat/_aerostat.dm b/maps/expedition_vr/aerostat/_aerostat.dm index e4a5d2c528..54ddab176a 100644 --- a/maps/expedition_vr/aerostat/_aerostat.dm +++ b/maps/expedition_vr/aerostat/_aerostat.dm @@ -36,6 +36,81 @@ /datum/random_map/noise/ore/virgo2/check_map_sanity() return 1 //Totally random, but probably beneficial. +/datum/random_map/noise/ore/virgo2/apply_to_turf(var/x,var/y) //Same as normal + Rutile + + var/tx = ((origin_x-1)+x)*chunk_size + var/ty = ((origin_y-1)+y)*chunk_size + + for(var/i=0,i[M] triggered the [bicon(src)] [src]
    ") + to_chat(O, "[M] triggered the \icon[src][bicon(src)] [src]") triggered = 1 call(src,triggerproc)(M) diff --git a/maps/gateway_vr/isle_de_monch.dmm b/maps/gateway_vr/isle_de_monch.dmm new file mode 100644 index 0000000000..501945adeb --- /dev/null +++ b/maps/gateway_vr/isle_de_monch.dmm @@ -0,0 +1,317 @@ +"ah" = (/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"aj" = (/obj/structure/closet/crate/secure/loot,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"bh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/closet/walllocker_double/south{name = "Uniform Locker"},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"bE" = (/obj/structure/table/steel,/obj/machinery/light,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = -2},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"bR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"cq" = (/turf/simulated/floor/water/beach{dir = 8},/area/tether_away/beach/coast) +"cA" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"cK" = (/obj/structure/bed/chair/bay/comfy{dir = 4},/obj/item/trash/spacercake_wrap,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"cR" = (/turf/simulated/floor/water/beach/corner{dir = 8},/area/tether_away/beach/coast) +"dZ" = (/turf/simulated/floor/water/beach{dir = 5},/area/tether_away/beach/coast) +"en" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"ey" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"eI" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach) +"eQ" = (/obj/machinery/door/airlock/hatch{req_one_access = list(160)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"fC" = (/turf/simulated/floor/water/beach{dir = 6},/area/tether_away/beach/coast) +"fH" = (/turf/simulated/floor/water/deep/ocean,/area/tether_away/beach/water) +"fO" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach/resort) +"gu" = (/obj/structure/hull_corner{dir = 1},/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"gC" = (/obj/tether_away_spawner/beach_outside,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach) +"gD" = (/obj/effect/overlay/palmtree_l,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach/resort) +"gV" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"hj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 8},/obj/item/trash/syndi_cakes,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"hC" = (/obj/structure/girder,/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"im" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/melee/baton/cattleprod{desc = "Metal rod with wire attached to it."; name = "jury-rigged antenna"; pixel_x = 5; pixel_y = 4},/turf/simulated/floor/outdoors/grass,/area/tether_away/beach/resort) +"iM" = (/obj/structure/barricade,/turf/simulated/floor/outdoors/newdirt,/area/tether_away/beach/resort) +"jk" = (/turf/simulated/floor/water/beach{dir = 10},/area/tether_away/beach/coast) +"jo" = (/obj/structure/salvageable/machine,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"ju" = (/obj/structure/girder,/turf/simulated/floor/outdoors/newdirt,/area/tether_away/beach/resort) +"jy" = (/turf/simulated/floor/water/beach/corner,/area/tether_away/beach/coast) +"jH" = (/obj/random/multiple/corp_crate,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"jJ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/bed,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"jX" = (/obj/structure/salvageable/console{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"kj" = (/obj/machinery/atmospherics/binary/pump/fuel{dir = 1},/obj/random/trash_pile,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"kk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"ks" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/salvageable/console{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"kx" = (/obj/machinery/gateway{dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/reinforced,/area/tether_away/beach/resort) +"kJ" = (/turf/simulated/floor/water/beach,/area/tether_away/beach/coast) +"kQ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/wall/shull,/area/tether_away/beach/resort) +"lJ" = (/obj/structure/table/rack,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"mp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"mr" = (/obj/structure/barricade,/turf/simulated/mineral/floor/cave{name = "dirt"},/area/tether_away/beach/resort) +"mt" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{dir = 4; id_tag = "salamander_docking_star"; name = "Starboard Airlock Control"; pixel_x = -22; req_one_access = list(160)},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"mA" = (/obj/structure/railing/grey{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"mV" = (/obj/machinery/atmospherics/unary/engine/bigger{dir = 4},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"nL" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/hatch{req_one_access = list(160)},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"nV" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"oe" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 2; req_one_access = list(160)},/obj/machinery/door/firedoor/multi_tile{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"oB" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/structure/catwalk,/obj/machinery/light/small{dir = 1},/obj/random/trash_pile,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"oI" = (/obj/machinery/gateway{dir = 9},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/reinforced,/area/tether_away/beach/resort) +"oS" = (/turf/simulated/floor/water/ocean,/area/tether_away/beach/water) +"oY" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"pB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"pJ" = (/obj/structure/salvageable/console{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"pX" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/fuel,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"qf" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/item/clothing/ears/earmuffs,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"qQ" = (/obj/structure/hull_corner{dir = 4},/turf/simulated/floor/outdoors/newdirt,/area/tether_away/beach/resort) +"rd" = (/obj/effect/map_helper/airlock/sensor/int_sensor,/obj/machinery/airlock_sensor{dir = 8; pixel_x = 21; req_one_access = list(160)},/obj/structure/handrail{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"rN" = (/obj/machinery/door/airlock/glass_external/public,/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"rS" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/railing/grey{dir = 1},/obj/machinery/atmospherics/portables_connector/fuel{dir = 4},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"sk" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"so" = (/obj/item/broken_device/random,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"sF" = (/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"tG" = (/obj/structure/bed/chair/bay/chair{dir = 4},/obj/machinery/button/remote/blast_door{id = "trade"; name = "Shop Shutters"; pixel_y = -26; req_access = list(160)},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"tO" = (/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"ue" = (/obj/effect/landmark/gateway_scatter,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach/resort) +"up" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable,/obj/structure/railing/grey{dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"uL" = (/obj/random/trash_pile,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"vx" = (/obj/machinery/gateway{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced,/area/tether_away/beach/resort) +"vy" = (/turf/simulated/floor/water/beach/corner{dir = 4},/area/tether_away/beach/coast) +"vN" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"vT" = (/obj/machinery/atmospherics/pipe/simple/hidden/fuel{dir = 10},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"wo" = (/obj/structure/handrail{dir = 1},/obj/machinery/alarm/alarms_hidden{dir = 4; pixel_x = -26},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/light{dir = 8},/obj/structure/closet/autolok_wall{dir = 1; pixel_y = -32},/obj/structure/railing/grey{dir = 4},/obj/structure/bed/chair/bay/comfy{dir = 4},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"wp" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"ww" = (/mob/living/simple_mob/vore/aggressive/deathclaw,/turf/simulated/mineral/floor/cave{name = "dirt"},/area/tether_away/beach/resort) +"wY" = (/turf/simulated/floor/water/beach/corner{dir = 1},/area/tether_away/beach/coast) +"xc" = (/obj/machinery/gateway{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/reinforced,/area/tether_away/beach/resort) +"xe" = (/obj/structure/handrail,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"xf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"xM" = (/obj/item/stack/cable_coil,/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/item/weapon/melee/baton/cattleprod{desc = "Metal rod with wire attached to it."; name = "jury-rigged antenna"; pixel_x = 5; pixel_y = 4},/obj/item/weapon/cell/emergency_light{pixel_x = -4},/obj/item/device/radio/off{channels = list("Talon" = 1); pixel_x = 4; pixel_y = -3},/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"xS" = (/obj/item/clothing/head/soft/black,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"xU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"xZ" = (/turf/simulated/mineral/floor/cave{name = "dirt"},/area/tether_away/beach/resort) +"yc" = (/obj/structure/barricade,/obj/structure/barricade/planks,/turf/simulated/mineral/floor/cave{name = "dirt"},/area/tether_away/beach/resort) +"yd" = (/turf/simulated/wall/shull,/area/tether_away/beach/resort) +"yn" = (/obj/structure/table/steel_reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "trade"; name = "Shop Shutters"; opacity = 0},/obj/structure/railing/grey{dir = 1},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor/eastleft{layer = 2.9; open_layer = 2.9; req_access = list(); req_one_access = list(160)},/obj/random/mug,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"yw" = (/obj/structure/closet/autolok_wall{pixel_y = 32},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"zX" = (/obj/structure/salvageable/computer,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"Af" = (/obj/machinery/door/airlock/glass_external/public,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"Aq" = (/obj/machinery/gateway{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/reinforced,/area/tether_away/beach/resort) +"As" = (/obj/tether_away_spawner/beach_outside,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach/resort) +"AE" = (/obj/effect/map_helper/airlock/sensor/chamber_sensor,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1},/obj/machinery/airlock_sensor{dir = 4; pixel_x = -21; req_one_access = list(160)},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"AI" = (/turf/simulated/floor/water/beach{dir = 1},/area/tether_away/beach/coast) +"Cd" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/fuel{dir = 4},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Cw" = (/obj/machinery/alarm/alarms_hidden{dir = 8; pixel_x = 26},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"Cx" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 6},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Dt" = (/obj/machinery/gateway{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/reinforced,/area/tether_away/beach/resort) +"DJ" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/outline,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"DW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 1},/obj/effect/catwalk_plated,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Em" = (/turf/simulated/floor/outdoors/newdirt,/area/tether_away/beach/resort) +"ET" = (/turf/simulated/floor/outdoors/grass,/area/tether_away/beach/resort) +"Fr" = (/obj/structure/barricade,/obj/structure/barricade/planks,/turf/simulated/floor/outdoors/newdirt,/area/tether_away/beach/resort) +"Ft" = (/obj/machinery/atmospherics/pipe/manifold/hidden/fuel{dir = 1},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"FK" = (/obj/structure/hull_corner,/turf/simulated/floor/outdoors/newdirt,/area/tether_away/beach/resort) +"FP" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"FX" = (/obj/structure/bed/chair/bay/comfy{dir = 4},/obj/effect/decal/remains,/obj/item/clothing/under/utility,/obj/item/clothing/shoes/boots/workboots,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"Gv" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/railing/grey{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"Gy" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"GX" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"Hg" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Ht" = (/obj/structure/handrail{dir = 1},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Hx" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/newdirt,/area/tether_away/beach/resort) +"HH" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"HN" = (/obj/effect/overlay/coconut,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach) +"HY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"IZ" = (/obj/machinery/gateway,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/reinforced,/area/tether_away/beach/resort) +"Jd" = (/obj/machinery/gateway{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/reinforced,/area/tether_away/beach/resort) +"Jr" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 5},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"JB" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/reinforced,/area/tether_away/beach/resort) +"Km" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/railing/grey{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"KH" = (/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Lt" = (/obj/effect/overmap/visitable/sector/virgo4,/turf/simulated/floor/water/deep/ocean,/area/tether_away/beach/water) +"Mm" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/voidcraft{req_one_access = list(160)},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"Mr" = (/obj/structure/bed/chair,/obj/effect/decal/remains,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"MI" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/industrial/outline,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"MM" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/fuel{dir = 4},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"MO" = (/obj/structure/table/steel,/obj/machinery/light_switch{dir = 8; pixel_x = -22},/obj/structure/closet/walllocker_double/kitchen/south,/obj/item/device/multitool{pixel_x = 4; pixel_y = 2},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"NH" = (/obj/machinery/light/small{dir = 1},/obj/random/trash_pile,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"NY" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach) +"Od" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"OJ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"OR" = (/obj/structure/handrail{dir = 1},/obj/structure/closet/walllocker_double/south{name = "Storage Locker"},/obj/random/multiple/corp_crate,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"Pd" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Po" = (/obj/structure/table/standard,/obj/item/weapon/pen,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"PI" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"Qo" = (/turf/simulated/floor/water/beach{dir = 4},/area/tether_away/beach/coast) +"Qx" = (/obj/structure/bed/chair/bay/chair,/obj/structure/handrail,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_y = 24},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/closet/autolok_wall{dir = 8; pixel_x = -32},/obj/effect/decal/remains,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"QK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"QZ" = (/obj/effect/overlay/coconut,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach/resort) +"Rs" = (/turf/simulated/wall/r_wall,/area/tether_away/beach/resort) +"RJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"Sk" = (/obj/structure/handrail{dir = 1},/obj/random/trash_pile,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Sp" = (/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach) +"Ss" = (/obj/machinery/light_switch{dir = 4; pixel_x = 22},/obj/structure/bed,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"SC" = (/obj/structure/railing/grey{dir = 8},/obj/structure/handrail{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/closet/walllocker_double/south{name = "Voidsuit Locker"},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"SG" = (/obj/effect/decal/remains,/turf/simulated/mineral/floor/cave{name = "dirt"},/area/tether_away/beach/resort) +"Th" = (/obj/structure/table,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"TB" = (/obj/effect/landmark/gateway_scatter,/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach) +"TQ" = (/obj/structure/salvageable/console,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"TR" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"TW" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -28},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/obj/structure/handrail,/obj/machinery/light{dir = 8},/obj/structure/closet/autolok_wall{pixel_y = 32},/obj/structure/railing/grey{dir = 4},/obj/item/weapon/gun/projectile/pistol,/obj/item/ammo_magazine/m9mm/compact,/obj/item/ammo_magazine/m9mm/compact,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"Uk" = (/obj/structure/catwalk,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Uu" = (/obj/machinery/light,/obj/structure/closet/walllocker_double/south{name = "Storage Locker"},/obj/structure/closet/crate/secure/loot,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"Uy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"UB" = (/turf/simulated/floor/beach/sand/desert/outdoors,/area/tether_away/beach/resort) +"Ve" = (/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "trade"; name = "Shop Shutters"; opacity = 0},/obj/structure/table/steel_reinforced,/obj/machinery/door/window/brigdoor/eastright{layer = 2.9; open_layer = 2.9; req_access = list(); req_one_access = list(160)},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"Vs" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"VD" = (/obj/structure/salvageable/server,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"Wb" = (/turf/simulated/floor/water/beach{dir = 9},/area/tether_away/beach/coast) +"Wm" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"WJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"WS" = (/obj/structure/barricade,/obj/structure/barricade/planks,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Xf" = (/obj/machinery/door/airlock/glass_external/public,/obj/effect/map_helper/airlock/door/ext_door,/obj/effect/map_helper/airlock/sensor/ext_sensor,/obj/machinery/airlock_sensor/airlock_exterior/shuttle{pixel_x = 24; pixel_y = -11},/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"Xl" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"Xo" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/handrail{dir = 1},/obj/structure/closet/walllocker_double/south{name = "Storage Locker"},/obj/structure/closet/crate/secure/loot,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"Xw" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"Xx" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"XA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/outdoors/grass,/area/tether_away/beach/resort) +"XJ" = (/obj/random/multiple/corp_crate,/turf/simulated/floor/outdoors/grass/forest,/area/tether_away/beach/resort) +"XT" = (/turf/unsimulated/wall/planetary/normal/virgo4,/area/tether_away/beach/water) +"Yj" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/structure/closet/walllocker/emerglocker/east,/turf/simulated/floor/tiled/techmaint,/area/tether_away/beach/resort) +"YD" = (/obj/structure/handrail{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/tether_away/beach/resort) +"YN" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/tether_away/beach/resort) +"ZX" = (/turf/simulated/mineral/ignore_mapgen,/area/tether_away/beach/resort) +"ZZ" = (/obj/effect/decal/cleanable/blood,/turf/simulated/mineral/floor/cave{name = "dirt"},/area/tether_away/beach/resort) + +(1,1,1) = {" +XTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSWbAIAIAIAIdZoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSWbvySpSpSpSpcRdZoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSWbAIvySpSpSpSpSpSpcRdZoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSWbvySpSpSpSpUBUBSpSpSpQooSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSWbAIvySpSpSpUBZXZXZXZXSpSpcRdZoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSWbvySpSpSpSpUBZXZXZXZXZXUBSpSpcRdZoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSWbvySpSpSpUBZXZXZXZXZXZXZXZXSpSpSpQooSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSWbAIAIAIAIdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSWbvySpSpSpUBZXZXZXZXZXZXZXZXZXUBSpSpQooSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSWbvySpSpSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoScqSpSpSpZXZXZXZXZXZXZXZXZXZXZXZXSpSpcRAIdZoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoScqSpSpSpSpSpSpcRAIdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpZXZXZXZXZXZXZXZXZXZXZXZXZXUBSpSpSpcRAIAIAIdZoSoSfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoScqSpTBUBUBSpSpSpSpcRAIAIAIAIAIdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSWbvySpSpZXZXZXZXZXZXZXZXZXZXZXZXZXZXSpSpSpSpSpSpSpcRdZoSoSfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpUBUBUBSpSpSpSpSpSpSpSpSpcRAIAIAIAIAIdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSWbvySpSpZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXSpSpSpSpSpSpcRdZoSfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoScqSpSpSpUBUBueUBUBSpSpSpSpSpSpSpSpSpSpSpSpSpcRAIAIAIAIAIAIAIdZoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoScqSpSpUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBSpSpSpQooSoSoSfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoScqSpSpUBUBUBUBUBUBUBUBUBUBUBUBSpSpSpSpSpSpSpSpSpSpSpSpSpSpSpcRAIAIdZoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBSpSpSpQooSoSoSoSfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpUBUBUBUBETETETETETETETETUBUBUBUBUBUBSpSpSpSpSpSpSpSpSpSpSpSpcRdZoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBSpSpSpjyfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpSpUBETETETETETETETETETETETETETETETUBUBUBUBUBfOUBUBUBUBSpSpSpSpeIcRdZoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBSpSpjyfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpSpETETETETETETETETETETETETETETETETETETETUBUBUBUBUBUBUBgDQZUBUBSpSpSpcRdZoSoSoSoSoSfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbAIAIvySpSpSpETETETETETETETETETETETETETETETETETETETETETETUBUBUBUBUBUBUBUBUBUBSpSpSpQooSoSoSoSoSfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpSpSpSpUBETETETETETETETETETETETETETETETETETETETETETETETUBUBUBUBUBUBUBUBUBUBgCSpcRdZoSoSoSoSfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSjkwYSpSpUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpSpSpUBUBETETETETETETETETETETETETETsFsFsFsFsFsFETETETETETUBUBUBUBUBUBUBUBfOUBSpSpSpQooSoSoSoSoSfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoScqSpSpUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXSpSpjyfCoSoSoSoSoSoSoSoSoSoSoSoSoSoScqSpSpSpUBUBUBETETETETETETETETsFsFsFsFEmydydydydydydydEmETETETETETUBUBUBUBUBUBUBQZUBUBSpSpQooSoSoSoSoSfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoScqSpSpSpUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXSpQooSoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpUBUBUBETETETETETETETsFsFsFsFEmEmEmKHKHxeajKHjHEmEmEmETETETETETETETETUBUBUBUBUBUBSpSpQooSoSoSoSoSfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSjkwYSpSpSpZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXSpQooSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpUBUBUBETETETETETETETsFsFsFsFEmEmEmEmEmuLUkUkUkUkKHEmsFsFsFETETETETETETETUBUBUBUBUBSpSpQooSoSoSoSoSfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSjkwYSpSpSpZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXSpQooSoSoSoSoSoSoSoSoSoSoSWbAIvySpSpSpUBUBETETETETETETETsFsFsFsFsFsFsFsFsFEmydnLydydydEmsFsFsFydsFETETETETETETETUBUBUBUBSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSjkkJwYSpSpZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXSpSpQooSoSoSoSoSoSoSoSoSoSWbvySpSpSpSpUBUBETETETETETETFKydydydjuydsFsFsFhCsFsFsFsFsFsFsFFPsFydydydsFhCsFETETydydETETUBUBUBSpSpcRdZoSoSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXSpjyfCoSoSoSoSoSoSoSoSoSoScqSpSpSpUBUBUBUBETETETETEmEmydydydNHKHYNXxsFsFsFsFKHsFKHEmEmEmsFsFsFXJsFsFsFsFEmKHSsydETETUBUBUBUBSpSpQooSoSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpUBZXZXZXZXZXZXZXZXZXZXZXSpSpjyfCoSoSoSoSoSoSoSoSoSoSWbvySpSpUBUBUBUBETETETEmEmEmEmKHoYMMFtvTJrwpsFEmEmEmEmEmEmEmjuEmEmEmEmsFEmEmEmEmEmUyCwydydenenWmUBUBSpSpQooSoSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpUBZXZXZXZXZXZXZXZXZXSpSpjyfCoSoSoSoSoSoSoSoSoSoSWbvySpSpSpUBUBUBUBETETETETEmEmEmmVGyCdKHkjOJOdajsFsFsFEmydydydydEmEmjusFsFKHsFEmEmKHHYydydTWjJTQPdWmUBSpSpcRdZoSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoScqSpSpSpUBUBZXZXZXZXZXZXZXSpSpQooSoSoSoSoSoSoSoSoSoSoScqSpSpSpUBUBUBUBETETETETETETsFEmjuydydrSpXsFsFsFsFhCsFsFKHsFsFsFsFsFsFydydsFEmEmbRKHpBtOxUhjkkFXpJHHUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpSpSpUBZXZXZXZXZXUBSpSpQooSoSoSoSoSoSoSoSoSoSWbvySpSpUBUBUBUBUBETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFEmEmEmEmKHKHKHsFsFsFEmEmEmEmEmxfDWbhoeqfKHcKpJHHUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkkJwYSpSpSpSpUBUBUBUBUBSpSpQooSoSoSoSoSoSoSoSoSoScqSpSpSpUBUBUBUBUBETETETETsFsFEmEmKHsFsFEmEmEmEmHxEmEmEmKHKHKHKHKHKHKHsFsFsFsFsFEmEmydMmydydwoxSjXPdgVUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkkJwYSpSpSpSpUBUBSpSpjyfCoSoSoSoSoSoSoSoSoSWbvySpSpUBUBUBUBUBETETETETETEmEmKHKHKHKHEmEmEmEmKHmAYDKHKHGvGXahKmeyyntOtOSCHtsFEmEmEmKHWJCwydydcAcAgVUBUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkkJwYSpSpSpSpSpSpQooSoSoSoSoSoSoSoSoSoScqSpSpSpUBUBUBUBUBETETETETsFsFEmmVKHuLEmEmEmKHKHKHupahydPIORSkUuXotGVetOrdydydQKKHEmEmEmKHsFETETETETETUBUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSWbAIAIAIAIAIAIdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpSpSpjyfCoSoSoSoSoSoSoSoSoSWbvySpSpUBfOUBUBUBUBETETETETsFEmEmEmHgjuEmEmEmEmEmKHydydydeQydydydydydydrNrNydQxWJKHKHsFsFsFsFETETETETUBUBUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSWbvySpSpHNSpSpSpcRAIAIdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkkJkJkJkJfCoSoSoSoSoSoSoSoSoSWbvySpSpgCUBUBQZUBUBETETETETsFsFsFsFEmEmEmEmEmEmEmEmydydajywKHUkKHUkCxoBkQAEYjydMOksbEsFsFTRsFsFETETETETUBUBUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpNYSpSpSpSpSpSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpSpUBUBUBUBUBUBETETETETsFsFsFsFsFsFsFsFsFEmEmEmEmydydskUkjHajjHDJMIydmtYjydydnVydsFsFRJsFsFETETETETUBUBUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSWbvySpSpUBUBUBUBSpSpSpSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbAIvySpeISpUBUBUBUBUBUBUBETETETETsFsFsFsFsFsFsFsFsFsFsFsFEmqQydydjujuydydHgydydAfXfydgusFsFsFsFRJsFsFETETETUBUBUBUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBUBUBfOUBUBUBUBSpSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbAIvySpSpSpSpUBUBUBUBUBUBUBUBETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFEmEmEmEmEmsFsFsFsFsFsFsFsFsFsFsFsFxMVsmpXAXAimETUBUBUBUBUBSpSpQooSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpeIUBAsUBUBUBUBUBUBUBSpSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbAIvySpSpSpSpUBUBUBUBgDUBUBUBUBETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBSpSpSpQooSoSoSoSoSfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBUBUBUBUBUBUBUBUBfOSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpSpSpSpUBAsUBUBUBUBUBUBUBETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBSpSpjyfCoSoSoSoSoSfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSWbvySpSpUBUBUBUBZXZXUBUBUBUBUBSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpSpeIUBUBUBUBUBUBUBUBUBUBETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETETUBUBUBSpSpQooSoSoSoSoSoSfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBfOUBUBZXZXZXZXZXUBUBUBSpSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSWbvySpSpSpQZUBUBUBgDUBUBUBUBUBUBETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBSpSpSpQooSoSoSoSoSoSfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpQZUBUBZXZXZXZXZXZXUBUBUBUBSpSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoScqSpSpSpUBUBUBUBUBUBUBUBUBUBETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBSpSpjyfCoSoSoSoSoSoSfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoScqSpSpUBUBZXZXZXZXZXZXZXZXUBUBgDUBSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSWbvySpSpUBUBUBUBUBUBUBUBETETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBUBSpSpQooSoSoSoSoSoSoSfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSWbvySpSpUBETZXZXZXZXZXZXZXZXZXUBQZUBUBSpSpcRdZoSoSoSoSoSoSoSoSoSoScqSpSpSpUBUBUBUBUBUBUBETETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBUBSpSpQooSoSoSoSoSoSoSfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoScqSpSpSpUBETZXZXZXZXZXZXZXZXZXUBUBUBUBNYSpSpQooSoSoSoSoSoSoSoSoSoScqSpSpUBUBUBUBUBUBUBETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETETUBUBUBUBSpSpQooSoSoSoSoSoSoSfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSWbvySpSpUBETETZXZXZXZXZXZXZXZXZXZXUBUBUBUBSpSpcRdZoSoSoSoSoSoSoSoSoScqSpSpUBUBfOUBUBUBETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETETUBUBUBUBUBSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSWbvySpSpUBETETETZXZXZXZXZXZXZXZXZXZXUBUBUBUBUBSpSpcRdZoSoSoSoSoSoSoSWbvySpSpUBUBUBUBUBUBETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETETETUBUBUBUBSpSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSWbAIvySpSpSpUBETETETZXZXZXZXZXZXZXZXZXZXZXUBUBUBUBSpSpSpQooSoSoSoSoSoSoScqSpSpSpUBUBUBUBUBUBETETETETETsFsFsFsFsFsFsFsFsFsFETETETETsFsFETETETETETETETsFsFsFsFETETETETsFsFsFsFsFsFETETETETETETETETUBUBUBUBUBSpSpjyfCoSoSoSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSWbAIvySpSpSpSpUBETETETETZXZXZXZXZXZXZXZXZXZXZXUBUBgDUBUBSpSpQooSoSoSoSoSoSoScqSpSpUBUBUBUBUBUBUBETETETETETsFsFsFsFsFsFsFsFsFETETETETETETETETETETETETETETETETETETETETETETETsFsFETETETETETETETETETETETUBUBUBUBUBSpSpQooSoSoSoSoSoSoSfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSWbvySpSpSpSpUBUBETETETETETZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBUBSpSpQooSoSoSoSoSoSWbvySpSpUBUBUBUBUBUBUBUBETETETETsFsFsFsFsFsFETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETUBUBUBUBUBSpSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSWbvySpSpSpUBUBUBETETETETETZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBUBSpSpcRdZoSoSoSoSoScqSpSpSpUBUBUBUBUBUBUBUBETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETUBUBUBUBUBSpSpSpjyfCoSoSoSoSoSoSfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSWbvySpSpSpUBETETETETETETETETZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBUBSpSpcRAIdZoSWbAIvySpSpUBUBUBUBUBUBUBUBUBUBETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETETUBUBUBUBUBSpSpjyfCoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpSpUBETETETETETETETETZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBUBSpSpSpSpcRAIvySpSpSpSpUBUBUBUBUBUBUBUBUBUBUBETETETETETETETETETETETETETUBUBUBUBUBETETETETETETETETUBUBUBUBUBUBETETETETETETETETETETETETUBUBUBUBUBSpSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHoSoSoSWbvySpSpUBETETETETETETETETZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBSpSpSpSpSpSpSpSpSpUBUBUBUBUBUBUBUBUBUBUBUBUBETETETETETETETETETUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBETETETETETETETETETETUBUBUBSpSpSpSpjyfCoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBETETETETETZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBUBSpSpSpSpSpUBUBUBUBUBUBUBUBUBUBUBueUBUBUBUBUBUBUBETETETUBUBUBUBUBUBUBUBUBUBUBSpSpSpSpSpSpSpSpSpUBUBUBUBUBUBUBUBETETETETETETETUBUBUBSpSpSpjykJfCoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpETETETZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBSpSpSpSpSpSpSpSpSpSpSpSpSpNYUBQZUBfOUBUBUBUBETETETETUBUBUBSpSpSpjyfCoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpETETZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBUBUBUBUBETETETETETUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBSpSpSpSpSpjykJkJkJkJkJkJkJwYSpSpSpSpUBUBUBUBUBUBUBUBUBUBUBUBSpSpSpjyfCoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHoSoSoSWbvySpSpETETZXZXZXZXZXRsRsRsRsRsRsRsRsRsRsZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBUBUBETETETETETETETETETUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBSpSpSpSpSpSpjykJkJfCoSoSoSoSoSoSoSjkkJwYSpSpSpSpUBUBUBfOUBUBUBUBUBUBSpSpjyfCoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBETETZXZXZXZXZXRsoIxckxKHRszXVDjoRsZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXUBETETETETETETETETETETETETETUBUBUBUBUBUBUBUBUBUBUBUBSpSpSpSpSpSpjykJfCoSoSoSoSoSoSoSoSoSoSoSoSjkkJwYSpSpUBUBUBUBUBUBueUBUBUBSpSpQooSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHoSoSoSWbvySpSpUBETZXZXZXZXZXZXRsAqJBvxXwKHahahKHRsZXSGxZZXZXZXZXZXZXZXZXZXZXZXZXZXZXETETETETsFsFsFsFETETETETETETETETUBUBUBUBUBUBUBUBSpSpSpSpjykJkJkJfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpUBUBUBUBUBUBUBUBUBSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHoSoSoScqSpSpSpUBZXZXZXZXZXZXZXRsDtIZJdahKHKHsoKHWSxZxZxZxZxZZXZXZXZXZXZXZXZXZXZXZXZXETETsFsFsFsFsFsFsFETETETETETETETETUBUBUBUBUBUBSpSpSpjykJfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoScqSpNYSpUBueUBUBUBUBgDSpSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBZXZXZXZXZXZXZXZXRsahKHKHKHKHKHKHKHWSxZxZxZSGxZZXZXZXZXZXZXZXZXZXZXZXETETETsFsFsFsFsFsFsFETETETETETETETETETUBUBUBUBSpSpSpjyfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpSpUBUBUBUBUBUBSpSpjyfCoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBZXZXZXZXZXZXZXZXRsRsRsRsRsKHXlMrThRsZXZXZXxZxZxZZXZXZXZXZXZXZXZXZXETETETETsFsFsFsFsFsFsFsFETETETETETETETETUBUBUBUBSpSpjyfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpSpQZfOUBUBSpSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpZXZXZXZXZXZXZXZXZXZXZXZXZXRslJvNvNPoRsZXZXZXZXycycZXZXZXZXZXZXZXZXZXETETETETETsFsFsFsFsFsFsFsFsFETETETETETETUBUBUBUBSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoSWbAIdZoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpSpSpSpSpSpSpjyfCoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpZXZXZXZXZXZXZXZXZXZXZXZXZXRsRsRsRsRsRsZXZXZXZXxZxZZXZXZXZXZXZXZXZXZXZXETETETETsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBUBSpSpcRdZoSoSoSoSoSoSoSoSoSWbAIAIvySpcRdZoSoSoSoSoSWbAIAIdZoSoSjkwYSpSpSpSpSpSpjyfCoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZxZxZZXZXZXZXZXZXZXZXZXETETETETsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBSpSpSpcRAIAIdZoSoSoSoSoSWbvySpSpSpSpSpcRdZoSoSoSWbvySpSpQooSoSoSjkkJkJkJkJkJkJfCoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZZZxZxZxZxZZXZXZXZXZXZXZXZXETETETETsFsFsFsFsFsFsFsFsFsFETETETETETETUBUBUBSpSpSpSpSpcRAIAIAIAIAIvySpSpSpSpSpSpSpQooSoSWbvyHNeIjyfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZxZxZxZxZxZxZxZxZZXZXZXZXZXZXZXZXETETETsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBUBSpSpSpSpSpSpSpSpSpSpNYSpSpSpSpSpNYSpcRdZoSjkwYSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqNYSpUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZxZSGxZxZxZxZxZxZSGZXZXZXZXZXZXZXZXETETETETsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBUBUBUBfOSpgCSpSpSpSpSpSpSpeISpSpgCSpSpQooSoSjkkJkJfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZZZxZxZxZxZxZxZZZxZxZxZZXZXZXZXZXZXZXETETETETsFsFsFsFsFsFsFsFsFsFsFsFETETETETUBUBUBUBUBSpSpSpSpSpSpSpSpSpgCSpSpSpSpSpSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZxZxZxZxZwwxZxZxZxZxZxZZXZXZXZXZXZXETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETUBUBSpSpSpSpSpSpSpSpNYHNSpSpSpSpSpNYSpSpSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZxZxZxZxZxZxZZZxZxZZZxZZXZXZXZXZXETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETUBSpSpSpjykJwYSpSpjykJwYSpSpSpSpSpHNSpSpNYjykJfCoSoSoSfHfHfHoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpgDUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZxZZZZZxZxZxZxZxZxZxZZXZXZXZXZXETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETUBSpSpjyfCoSjkkJkJfCoSjkkJwYSpSpSpSpSpjykJfCoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZxZZZxZxZxZxZxZxZZXZXZXZXZXETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETUBUBSpSpQooSoSoSoSoSoSoSoSoSjkkJkJkJkJkJfCoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZxZxZSGxZxZxZxZZXZXZXZXZXETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBUBSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHoSoSoSoSjkwYSpSpUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZxZxZxZxZiMZXZXETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBUBSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXxZxZmrFrFrEmETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBSpSpSpQooSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHoSoSoSoScqSpNYQZUBUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXiMFrEmEmETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBSpSpjyfCoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpSpUBUBUBUBUBZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXZXEmETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETUBSpSpSpQooSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHoSoSoSjkwYSpSpSpUBUBUBUBUBETETETETZXZXZXZXZXZXZXZXZXZXZXZXZXETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBSpSpjyfCoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHoSoSoSoSjkwYSpSpUBUBUBUBUBETETETETETZXZXZXZXZXZXZXZXZXZXZXETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBSpSpQooSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpeISpUBfOUBUBUBUBETETETETETETZXZXZXZXZXZXETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBSpSpcRdZoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSjkwYSpSpSpSpHNSpUBUBETETETETETETETETETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBSpSpSpQooSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSjkwYSpSpSpSpSpSpSpUBUBETETETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETUBUBUBSpSpcRdZoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSjkkJkJkJkJwYSpSpSpSpUBETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBUBSpSpcRAIdZoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSjkkJwYSpSpUBETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETUBUBUBSpSpSpSpQooSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSjkwYSpSpUBETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBUBSpSpSpcRdZoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoScqSpSpUBETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETsFsFsFsFsFsFETETETETETETUBUBUBUBSpSpSpcRdZoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoScqSpSpUBETETETETETsFsFsFsFsFsFsFsFsFsFsFsFsFETETETETETETETETETETETETETETETETETETETETETETETETUBUBUBUBUBUBSpSpSpcRdZoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSjkwYSpSpUBETETETETsFsFsFsFsFsFsFsFsFsFsFETETETETETETETETETETETETETETETETETETETETETETETETETETUBUBUBUBUBUBUBSpSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoScqSpSpUBETETETETsFsFsFsFsFsFsFsFsFsFsFETETETETETUBUBETETETETETETETETETETETETETETETETETETUBUBUBUBUBgDUBUBUBSpSpcRdZoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoScqSpSpUBETETETETETETsFsFsFsFsFsFsFETETETETETUBUBUBUBUBUBUBUBETETETETETETETETETETETETUBUBUBUBUBUBUBUBUBUBUBUBSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoScqSpSpUBETETETETETETsFsFsFsFsFsFETETETETETUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpUBETETETETETETsFsFsFsFsFETETETETETUBUBgDUBSpSpSpSpUBUBfOUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBAsUBSpSpQooSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSjkwYSpSpETETETETETETETsFsFsFETETETETETETUBQZSpSpSpSpSpSpSpUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBfOUBUBUBUBUBUBSpSpQooSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoScqSpSpETETETETETETETETETETETETETETETUBUBSpSpSpjykJwYSpSpUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBfOUBUBSpSpQooSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpUBETETETETETETETETETETETETETETUBUBSpSpjyfCoScqSpSpSpSpSpUBUBUBUBUBUBUBUBAsUBUBUBfOUBUBUBUBUBUBUBUBSpSpSpQooSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpUBUBETETETETETETETETETETETETETUBSpSpSpQooSoSjkwYSpSpSpSpSpSpSpHNgDUBUBUBUBUBUBUBUBUBUBUBUBUBUBUBSpSpSpjyfCoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoScqSpSpUBUBUBETETETETETETETETETETETUBfOSpSpjyfCoSoSoSjkkJkJwYSpSpSpSpSpSpSpUBUBUBUBUBUBUBUBUBUBgDQZUBUBSpSpjyfCoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoScqSpSpUBUBUBETETETETETETETETETETUBUBSpSpSpQooSoSoSoSoSoSoSjkkJkJkJkJwYSpSpSpSpUBUBUBUBAsUBUBUBUBUBUBUBSpSpQooSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSjkwYSpSpUBUBETETETETETETETETUBUBUBUBSpSpjyfCoSoSoSoSoSoSoSoSoSoSoSoSjkkJwYSpSpSpUBUBUBUBUBUBUBUBUBUBUBSpSpQooSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoScqSpSpUBUBETETETETETETETUBUBUBUBUBSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkwYSpSpUBUBUBUBUBUBUBUBAsUBfOSpSpQooSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoScqSpSpUBUBUBETETETUBUBUBUBUBUBfOSpSpSpQooSoSoSoSoSWbAIAIAIAIAIdZoSoSoSoSjkwYSpSpUBUBUBUBfOUBUBUBUBUBSpSpQooSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoScqSpSpUBUBUBUBUBUBUBUBUBfOUBUBSpSpSpjyfCoSoSoSWbAIvySpSpSpSpSpcRdZoSoSoSoScqSpSpSpSpSpSpQZUBUBUBUBSpSpSpQooSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoScqSpSpUBUBUBUBUBUBUBUBUBQZUBUBSpSpjyfCoSoSoSWbvySpSpSpSpSpSpSpSpcRdZoSoSoSjkwYSpSpSpSpSpSpSpSpSpSpSpSpjyfCoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoScqSpNYSpUBUBUBUBUBUBUBUBUBgDSpSpjyfCoSoSoSoScqSpSpHNeISpSpSpNYSpSpcRdZoSoSoSjkkJkJkJwYSpSpSpSpSpSpjykJfCoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSjkwYSpSpUBUBUBUBgDUBUBUBUBSpSpSpQooSoSoSoSoSjkwYSpSpSpSpNYTBSpHNSpSpcRAIdZoSoSoSoSoSjkkJkJkJkJkJkJfCoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSjkwYSpSpUBUBUBUBUBUBUBSpSpSpjyfCoSoSoSoSoSoSjkkJwYSpSpSpSpSpSpSpSpSpSpcRAIdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoScqSpSpNYUBUBUBUBUBSpSpSpjyfCoSoSoSoSoSoSoSoSoSjkkJkJkJwYSpSpTBSpeISpSpSpcRdZoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSjkwYHNSpSpSpSpSpSpSpSpjyfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSjkkJwYSpSpSpSpSpSpjyfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoScqSpSpSpSpSpSpSpjykJfCoSoSoSoSoSfHfHfHoSoSoSoSoSoSoSoSoSjkwYSpSpSpSpSpQooSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSjkwYSpSpSpSpSpSpQooSoSoSoSoSfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSjkkJkJkJkJkJfCoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSjkkJkJkJkJkJkJfCoSoSoSfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSoSfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTLtfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHfHXT +XTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXTXT +"} diff --git a/maps/gateway_vr/lucky_7.dm b/maps/gateway_vr/lucky_7.dm new file mode 100644 index 0000000000..66a6dd9486 --- /dev/null +++ b/maps/gateway_vr/lucky_7.dm @@ -0,0 +1,140 @@ +/obj/effect/overmap/visitable/sector/common_gateway/lucky7 + initial_generic_waypoints = list("tether_excursion_lucky7") + name = "Lucky 7 Casino and Restaraunt" + scanner_desc = @{"[i]Registration[/i]: _ERROR +[i]Class[/i]: Installation +[i]Transponder[/i]: Weak Signal +[b]Notice[/b]: Current estimated wait time: 999999"} + unknown_state = "station" + known = FALSE + icon_state = "lucky7_g" + +// -- Areas -- // + +/area/awaymission/lucky7 + icon_state = "away1" + +/area/awaymission/lucky7/casinofloor + name = "\improper Gateway - Casino Floor" + icon_state = "casino" + +/area/awaymission/lucky7/arcade + name = "\improper Gateway - Arcade" + icon_state = "arcade" + +/area/awaymission/lucky7/gateway + name = "\improper Gateway - Gateway" + icon_state = "away" + +/area/awaymission/lucky7/privategameroom + name = "\improper Gateway - Private Game Room One" + icon_state = "arcade2" + +/area/awaymission/lucky7/privategameroom/two + name = "\improper Gateway - Private Game Room Two" + +/area/awaymission/lucky7/privategameroom/three + name = "\improper Gateway - Private Game Room Three" + +/area/awaymission/lucky7/privateroom + name = "\improper Gateway - Private Room One" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/two + name = "\improper Gateway - Private Room Two" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/three + name = "\improper Gateway - Private Room Three" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/four + name = "\improper Gateway - Private Room Four" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/five + name = "\improper Gateway - Private Room Five" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/vip + name = "\improper Gateway - VIP Room" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/security + name = "\improper Gateway - Security" + icon_state = "security" + +/area/awaymission/lucky7/kitchen + name = "\improper Gateway - Kitchen" + icon_state = "kitchen" + +/area/awaymission/lucky7/bar + name = "\improper Gateway - Bar" + icon_state = "bar" + +/area/awaymission/lucky7/barbackroom + name = "\improper Gateway - Bar Backroom" + icon_state = "bar" + +/area/awaymission/lucky7/breakroom + name = "\improper Gateway - Breakroom" + icon_state = "green" + +/area/awaymission/lucky7/loungeprivateroom + name = "\improper Gateway - Private Lounge" + icon_state = "lounge" + +/area/awaymission/lucky7/lounge + name = "\improper Gateway - Lounge" + icon_state = "lounge" + +/area/awaymission/lucky7/laundry + name = "\improper Gateway - Laundry Room" + icon_state = "laundry" + +/area/awaymission/lucky7/medical + name = "\improper Gateway - Clinic" + icon_state = "medbay" + +/area/awaymission/lucky7/workshop + name = "\improper Gateway - Workshop" + icon_state = "yellow" + +/area/awaymission/lucky7/maint1 + name = "\improper Gateway - Maint 1" + icon_state = "maint" + +/area/awaymission/lucky7/maint2 + name = "\improper Gateway - Maint 2" + icon_state = "maint" + +/area/awaymission/lucky7/hall1 + name = "\improper Gateway - Hall 1" + icon_state = "hallway" + +/area/awaymission/lucky7/hall2 + name = "\improper Gateway - Hall 2" + icon_state = "hallway" + +/area/awaymission/lucky7/hotelhall + name = "\improper Gateway - Hotel Hall" + icon_state = "hallway" + +/area/awaymission/lucky7/trash + name = "\improper Gateway - Trash Collection" + icon_state = "disposal" + +/area/awaymission/lucky7/dock1 + name = "\improper Gateway - Dock 1" + icon_state = "entry_1" + +/area/awaymission/lucky7/dock2 + name = "\improper Gateway - Dock 2" + icon_state = "entry_2" + +/area/awaymission/lucky7/entry + name = "\improper Gateway - Entry Hall" + icon_state = "entry_3" + +/obj/machinery/telecomms/allinone/casino + freq_listening = list(PUB_FREQ, CSN_FREQ) \ No newline at end of file diff --git a/maps/gateway_vr/lucky_7.dmm b/maps/gateway_vr/lucky_7.dmm new file mode 100644 index 0000000000..c9e896b92f --- /dev/null +++ b/maps/gateway_vr/lucky_7.dmm @@ -0,0 +1,1299 @@ +"aa" = (/obj/effect/floor_decal/techfloor/orange{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"ab" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"ac" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/embedded_controller/radio/airlock/docking_port{dir = 8; frequency = 1380; id_tag = "l7_dock_d1a3"; pixel_x = 28},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"ad" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_switch{dir = 4; pixel_x = -26; pixel_y = -7},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"ae" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"af" = (/obj/structure/table/woodentable,/obj/machinery/light,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"ag" = (/obj/structure/table/borosilicate,/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"ah" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"ai" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"aj" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"ak" = (/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"al" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"am" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"an" = (/obj/structure/casino_table/craps{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"ao" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ap" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/item/weapon/material/knife/butch,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"aq" = (/obj/effect/floor_decal/spline/plain{dir = 10},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"ar" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/structure/cable/green,/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; pixel_y = -27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"as" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"at" = (/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"au" = (/obj/structure/casino_table/craps{dir = 1},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"av" = (/obj/structure/table/borosilicate,/obj/structure/dancepole,/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"aw" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"ax" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"ay" = (/obj/structure/table/borosilicate,/turf/simulated/floor/tiled/eris/steel/bar_light,/area/awaymission/lucky7/loungeprivateroom) +"az" = (/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aA" = (/obj/structure/table/bench/padded,/obj/effect/floor_decal/spline/plain,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"aB" = (/obj/structure/table/bench/padded,/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"aC" = (/obj/item/weapon/stool/padded{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aD" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom/four) +"aE" = (/obj/structure/casino_table/blackjack_m{dir = 4},/obj/machinery/light/floortube{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aF" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"aG" = (/obj/structure/table/bench/padded,/obj/effect/floor_decal/spline/plain,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"aH" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"aI" = (/obj/structure/casino_table/blackjack_r{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aJ" = (/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"aK" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/disposalpipe/junction{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aL" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aM" = (/obj/structure/casino_table/blackjack_r,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aN" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aO" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/grey/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"aP" = (/obj/effect/floor_decal/rust,/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"aQ" = (/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"aR" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"aS" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aT" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"aU" = (/obj/structure/casino_table/blackjack_r{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aV" = (/obj/machinery/light/floortube{dir = 8},/obj/structure/casino_table/roulette_chart,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aW" = (/obj/structure/cable/green,/obj/machinery/power/fractal_reactor/fluff/smes,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"aX" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/yellow/border{dir = 10},/obj/machinery/telecomms/allinone/casino,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"ba" = (/obj/structure/table/borosilicate,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"bc" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"be" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"bf" = (/obj/machinery/gateway{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"bh" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"bj" = (/obj/structure/window/basic,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"bn" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"bo" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"bp" = (/turf/simulated/wall,/area/awaymission/lucky7/privategameroom) +"bt" = (/obj/machinery/light/small,/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "l7_dock_d2a1"; pixel_y = 28},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1a1_sensor"; pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "dock_d1a1_pump"},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"bu" = (/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"bw" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"bx" = (/obj/structure/sink/kitchen{name = "sink"; pixel_y = 20},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"by" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/microwave,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"bB" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"bC" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"bD" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/item/device/radio{pixel_x = 10; pixel_y = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"bE" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"bH" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"bK" = (/obj/structure/bed/chair/bay/comfy/blue,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"bL" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/lightgrey/bordercorner,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"bN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"bP" = (/obj/structure/casino_table/blackjack_m{dir = 4},/obj/item/weapon/deck/cards/casino,/obj/machinery/light/floortube{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"bX" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"cb" = (/obj/machinery/gateway{dir = 9},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"cc" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"cm" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"cn" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"cp" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/loungeprivateroom) +"cq" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cr" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"cz" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"cD" = (/obj/structure/table/darkglass,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cF" = (/obj/structure/bed/chair/bay/comfy/blue{dir = 1},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cG" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"cH" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) +"cI" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"cJ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cK" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"cL" = (/obj/structure/bed/chair/bay/comfy/blue{dir = 1},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cM" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cN" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"cO" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/grey/border{dir = 10},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"cR" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"cT" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cV" = (/obj/effect/shuttle_landmark{base_area = /area/space; base_turf = /turf/space; docking_controller = "l7_dock_d2a2"; landmark_tag = "l7_dockarm_d2a2"; name = "Dock D2A2"},/turf/space,/area/space) +"cY" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"da" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 7; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -7; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -7; pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 7; pixel_y = -3},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"dd" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"df" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 4},/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hotelhall) +"dg" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/entry) +"dn" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/lightgrey/border{dir = 10},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"do" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"dr" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"du" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"dw" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"dy" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"dz" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"dC" = (/obj/structure/bed/chair/sofa/left/brown{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"dE" = (/obj/machinery/computer/arcade/battle,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"dF" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/space_heater,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"dG" = (/obj/structure/window/basic,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"dP" = (/obj/structure/flora/pottedplant/largebush,/obj/machinery/firealarm{pixel_y = 26},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"dS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/morgue{dir = 2; name = "Private Room"; req_access = null},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"dW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"dX" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/lightgrey/border{dir = 6},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/lightgrey/bordercorner2,/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"dZ" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"ea" = (/obj/machinery/bodyscanner{dir = 4},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"ec" = (/obj/machinery/door/morgue{dir = 2; name = "Private Room"; req_access = null},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"ed" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"ei" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"ej" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"em" = (/obj/machinery/door/airlock/maintenance/common,/obj/effect/floor_decal/rust,/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"en" = (/obj/structure/table/glass,/obj/machinery/door/window/eastleft{req_access = null},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"eo" = (/obj/structure/bed/chair/sofa/left/brown,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"ep" = (/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"er" = (/obj/effect/floor_decal/rust,/obj/structure/table/steel,/obj/item/weapon/weldingtool{pixel_x = 1; pixel_y = -4},/obj/item/clothing/glasses/welding{pixel_x = -3; pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"et" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"ev" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"ey" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/bluedouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"ez" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"eC" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"eF" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"eG" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"eH" = (/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"eL" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/handcuffs{pixel_y = -5},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs{pixel_y = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"eS" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"eU" = (/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"eV" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/firealarm{dir = 8; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"eW" = (/obj/machinery/door/airlock{id_tag = "L7 Room 3"; name = "Private Room 3"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"eY" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/item/weapon/material/kitchen/rollingpin,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"fb" = (/obj/random/trash_pile,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"fc" = (/obj/structure/bed/chair/wood{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"ff" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/storage/pill_bottle/happy,/obj/item/clothing/under/bathrobe,/obj/item/clothing/under/bathrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"fi" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"fl" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"fu" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/machinery/door/firedoor/glass/hidden/steel{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"fv" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"fx" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"fy" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/firealarm{pixel_y = 26},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"fA" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/alarm{dir = 8; pixel_x = 27},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"fD" = (/obj/machinery/door/airlock{id_tag = "L7 Room 1"; name = "Private Room 1"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"fH" = (/turf/simulated/wall,/area/awaymission/lucky7/privategameroom/three) +"fM" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"fN" = (/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"fO" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hotelhall) +"fQ" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom) +"fS" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hall2) +"fT" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"fU" = (/obj/structure/table/woodentable,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"fX" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/entry) +"fZ" = (/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"ga" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/bed/chair/office,/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ge" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall2) +"gf" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"gh" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"gi" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor/eastleft{dir = 2},/obj/item/weapon/pen,/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "casino_check"; opacity = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"gr" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/lightgrey/border{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"gx" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"gB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{icon_state = "2-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"gD" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"gG" = (/turf/simulated/wall,/area/awaymission/lucky7/hall2) +"gH" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"gL" = (/turf/simulated/wall,/area/awaymission/lucky7/dock1) +"gN" = (/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"gS" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"gU" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"gV" = (/obj/machinery/door/airlock{name = "Arcade"},/obj/structure/cable/green{icon_state = "4-8"},/obj/item/tape/engineering,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"gZ" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"hc" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"hh" = (/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"hi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "1-8"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"hm" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"hn" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"ho" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"hq" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"hu" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"hw" = (/obj/machinery/clawmachine,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"hy" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom/five) +"hD" = (/obj/item/weapon/stool/padded{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"hF" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/lightgrey/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"hI" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "dock_d1l_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1l_sensor"; pixel_x = 30; pixel_y = 8},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"hM" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/gateway) +"hN" = (/obj/structure/table/marble,/obj/effect/floor_decal/spline/plain{dir = 8},/obj/machinery/chemical_dispenser/premium/full{dir = 4},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"hO" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom) +"hS" = (/obj/structure/table/marble,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"hU" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"ia" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"ib" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"id" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) +"il" = (/obj/machinery/firealarm{dir = 8; pixel_x = -26},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"ip" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ir" = (/obj/structure/table/gamblingtable,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/machinery/light,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"it" = (/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"iu" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"iv" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"iy" = (/obj/structure/table/bench/padded,/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"iA" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 2},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"iB" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"iE" = (/obj/effect/floor_decal/techfloor/orange{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"iG" = (/obj/random/trash_pile,/obj/random/trash,/obj/random/trash,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"iJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"iM" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 1},/obj/machinery/vending/wallmed1/public{pixel_y = 28},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"iV" = (/obj/structure/flora/pottedplant/tropical,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"iZ" = (/obj/effect/floor_decal/techfloor/orange,/obj/machinery/light,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"jb" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hall2) +"jc" = (/obj/effect/floor_decal/rust,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"jd" = (/obj/structure/cable/green{icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"je" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"jl" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"jo" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"jp" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"jq" = (/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"jr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/door/firedoor/glass/hidden/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"jt" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"jv" = (/obj/machinery/light,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"jx" = (/obj/structure/table/woodentable,/obj/item/trash/asian_bowl,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"jA" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"jB" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"jC" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"jH" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"jI" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "dock_d1l"; name = "interior access button"; pixel_x = -28; pixel_y = -26; req_access = list(13)},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"jJ" = (/obj/machinery/light{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"jK" = (/obj/structure/table/steel,/obj/random/junk,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"jM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"jN" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"jP" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"jQ" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"jS" = (/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"jV" = (/obj/structure/cable/green{icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"jW" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"ka" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/rust,/obj/machinery/atmospherics/pipe/tank/air/full{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"kb" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"kc" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/lightgrey/bordercorner,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"kd" = (/turf/simulated/floor/carpet/purcarpet,/area/awaymission/lucky7/privateroom/vip) +"ke" = (/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"kh" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"km" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"kp" = (/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"ks" = (/obj/machinery/firealarm{dir = 8; pixel_x = -26},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"kv" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"kx" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"ky" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"kz" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/corner/lightgrey/border,/obj/machinery/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"kD" = (/turf/simulated/wall,/area/awaymission/lucky7/security) +"kF" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 4},/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hall2) +"kJ" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"kL" = (/obj/structure/table/marble,/obj/effect/floor_decal/spline/plain{dir = 1},/obj/machinery/alarm{pixel_y = 28},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"kN" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"kO" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"kP" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"kQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"kV" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"lh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"li" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"lm" = (/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"ln" = (/obj/item/weapon/stool/padded{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"lp" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal/deliveryChute,/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"lq" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"lu" = (/turf/simulated/wall,/area/awaymission/lucky7/maint1) +"lw" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"lx" = (/obj/random/drinkbottle,/obj/structure/table/fancyblack,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"lB" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/lightgrey/border{dir = 5},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"lE" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space) +"lF" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"lI" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"lL" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"lS" = (/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"lZ" = (/obj/structure/bed/chair/comfy/beige,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"mb" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"md" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"mh" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/pipe/tank/air/full{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"mo" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"mp" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"mq" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 6},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"mt" = (/obj/structure/closet/crate/trashcart,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"mu" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"mv" = (/obj/structure/table/standard,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"mw" = (/obj/structure/flora/pottedplant/unusual,/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"mC" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"mD" = (/obj/effect/floor_decal/techfloor/orange{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"mE" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"mH" = (/obj/machinery/gateway,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"mI" = (/obj/random/trash,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"mJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/janitor,/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"mK" = (/turf/simulated/wall,/area/awaymission/lucky7/casinofloor) +"mL" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"mN" = (/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{dir = 1; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"mO" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"mQ" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"mR" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/bed/chair/office,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"mS" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"mT" = (/obj/random/trash,/obj/random/trash,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"mV" = (/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"mW" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"mX" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"na" = (/obj/structure/casino_table/blackjack_m{dir = 8},/obj/machinery/light/floortube{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"ng" = (/obj/item/weapon/stool/padded{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"nh" = (/obj/structure/window/basic,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"nj" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"nl" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"nn" = (/obj/machinery/vending/deluxe_boozeomat/open,/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/tiled/techmaint/airless,/area/awaymission/lucky7/barbackroom) +"np" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"nq" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"ns" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"nv" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"nw" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"nz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"nA" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"nC" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"nD" = (/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 9},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 9},/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"nE" = (/obj/machinery/door/airlock{id_tag = "L7 PGR 1"; name = "Private Game Room 1"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"nK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"nM" = (/obj/machinery/door/airlock{id_tag = "L7 PGR 2"; name = "Private Game Room 2"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"nN" = (/obj/machinery/gibber,/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"nR" = (/obj/structure/table/bench/padded,/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"nS" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/obj/structure/cable/green,/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"nX" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"nY" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"ob" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"og" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"oh" = (/obj/machinery/door/airlock{id_tag = "L7 PGR 3"; name = "Private Game Room 3"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"ol" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"op" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"oq" = (/obj/effect/floor_decal/techfloor/orange{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"or" = (/obj/structure/bed/chair/sofa/left/purp,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"os" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"oA" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"oD" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"oE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"oF" = (/obj/random/trash_pile,/obj/random/trash,/obj/random/junk,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"oG" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"oH" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/obj/machinery/light,/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"oO" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"oP" = (/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"oS" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"oT" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/radio,/obj/item/ammo_casing/spent{pixel_x = -12; pixel_y = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"oV" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"oY" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hotelhall) +"pb" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/arcade) +"pe" = (/obj/machinery/door/airlock/glass_security{req_one_access = null},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"pk" = (/obj/structure/table/glass,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 8},/obj/random/medical,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"pn" = (/obj/item/weapon/flame/candle/candelabra/everburn,/obj/structure/table/fancyblack,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"pr" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1a1"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"ps" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/book/manual/wizzoffguide,/obj/item/weapon/deck/wizoff,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"py" = (/obj/machinery/button/remote/airlock{id = "L7 PGR 1"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"pA" = (/obj/structure/bed/chair/sofa/bench/left{dir = 1},/obj/effect/floor_decal/borderfloorblack{dir = 10},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"pB" = (/obj/machinery/button/remote/airlock{id = "L7 PGR 2"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"pE" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"pH" = (/obj/machinery/button/remote/blast_door{dir = 8; id = "L7 Cell 1"; name = "Cell 1 Door"; pixel_x = 28; req_access = null},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"pL" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"pM" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"pN" = (/obj/structure/bed/chair/comfy/beige,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"pO" = (/obj/structure/table/rack/shelf/steel,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/random/tool,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"pP" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"pV" = (/turf/simulated/wall,/area/awaymission/lucky7/loungeprivateroom) +"pX" = (/obj/structure/table/reinforced,/obj/item/ammo_magazine/m45{pixel_x = -5; pixel_y = -3},/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45{pixel_x = 5; pixel_y = 3},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"qd" = (/obj/machinery/button/remote/airlock{id = "L7 PGR 3"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"qg" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/sol,/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/hotelhall) +"qk" = (/obj/structure/railing{dir = 1},/obj/random/trash_pile,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"qs" = (/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"qt" = (/obj/effect/shuttle_landmark{base_area = /area/space; base_turf = /turf/space; docking_controller = null; landmark_tag = "l7_dock_near"; name = "Near Dock"},/turf/space,/area/space) +"qv" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/captaindouble,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet/purcarpet,/area/awaymission/lucky7/privateroom/vip) +"qw" = (/obj/effect/floor_decal/rust,/obj/structure/table/rack/shelf/steel,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"qz" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"qA" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"qB" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"qF" = (/turf/simulated/wall,/area/awaymission/lucky7/breakroom) +"qG" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"qH" = (/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"qL" = (/obj/structure/table/borosilicate,/obj/structure/dancepole,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"qM" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"qN" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/lounge) +"qS" = (/obj/structure/casino_table/blackjack_l{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"qU" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"qW" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/grey/border{dir = 1},/obj/machinery/vending/wallmed1/public{pixel_y = 28},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"qY" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"rb" = (/obj/machinery/gateway{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"re" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"rf" = (/obj/effect/floor_decal/techfloor/orange{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"rg" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/grey/border{dir = 6},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"rj" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/casinofloor) +"rm" = (/turf/space,/area/space) +"rn" = (/obj/structure/table/woodentable,/obj/effect/floor_decal/spline/plain{dir = 8},/obj/item/clothing/mask/smokable/pipe,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"rp" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ru" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"rw" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/bar) +"rx" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"rA" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance/common{name = "Trash Collection"},/obj/structure/catwalk,/obj/structure/cable/green{dir = 1; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"rB" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"rK" = (/obj/structure/bed/chair/sofa/bench/right{dir = 1},/obj/effect/floor_decal/borderfloorblack{dir = 6},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"rM" = (/obj/effect/decal/cleanable/blood/oil,/obj/structure/railing,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"rN" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/bar_guide,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"rT" = (/obj/structure/casino_table/blackjack_r{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"rU" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"rZ" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"sc" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"sg" = (/obj/machinery/sleeper{dir = 4},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"si" = (/obj/structure/bed/chair/wood{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"sk" = (/obj/random/trash,/obj/random/trash,/obj/random/junk,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"sm" = (/obj/structure/table/standard,/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"so" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"sp" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/firealarm{dir = 8; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"sq" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"ss" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"sv" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"sB" = (/obj/machinery/washing_machine,/obj/item/clothing/under/modjump3,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"sH" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/yellow/border{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"sM" = (/obj/structure/catwalk,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"sQ" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"sS" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"sT" = (/turf/simulated/wall,/area/awaymission/lucky7/maint2) +"sU" = (/obj/effect/floor_decal/techfloor/orange{dir = 6},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"sV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"sX" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/cigar/havana{pixel_x = -2; pixel_y = 2},/obj/item/weapon/storage/fancy/cigar{pixel_x = 2; pixel_y = 3},/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/bar) +"sZ" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"tc" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"td" = (/obj/structure/casino_table/roulette_chart,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"te" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"tm" = (/obj/machinery/vending/deluxe_dinner/open,/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/tiled/techmaint/airless,/area/awaymission/lucky7/barbackroom) +"to" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/item/weapon/stool/padded{dir = 8},/obj/effect/decal/cleanable/filth,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"tp" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"tr" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"ts" = (/obj/effect/decal/cleanable/blood/oil,/obj/structure/closet/crate/internals,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"tt" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/alarm{dir = 8; pixel_x = 27},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"tv" = (/obj/structure/casino_table/roulette_table,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"tz" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"tD" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"tE" = (/obj/structure/table/marble,/obj/item/weapon/material/ashtray/glass,/obj/machinery/light/floortube{dir = 4},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"tG" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"tH" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"tJ" = (/obj/effect/floor_decal/sign/dock/one,/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"tM" = (/obj/structure/table/gamblingtable,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/structure/cable/green{icon_state = "0-2"},/obj/effect/floor_decal/corner/yellow/border{dir = 5},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"tQ" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"tV" = (/obj/effect/floor_decal/techfloor/orange{dir = 1},/obj/effect/floor_decal/techfloor/hole/right{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"tY" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"tZ" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"ua" = (/obj/machinery/door/firedoor/glass/hidden/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ub" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"uc" = (/obj/effect/floor_decal/techfloor/orange{dir = 5},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"ue" = (/obj/structure/bed/chair/sofa/bench/right,/obj/effect/floor_decal/borderfloorblack{dir = 9},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"uf" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 4},/obj/structure/flora/pottedplant,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"up" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"uu" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/two) +"uv" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ux" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/door/firedoor/glass/hidden/steel,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"uy" = (/obj/structure/cable/green{icon_state = "2-4"},/obj/effect/floor_decal/rust,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uz" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uA" = (/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance/engineering,/obj/structure/table/rack/steel,/obj/random/contraband,/obj/structure/railing,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uB" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"uE" = (/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"uF" = (/obj/structure/casino_table/craps,/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/obj/machinery/light/floortube{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"uG" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"uH" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"uI" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uJ" = (/obj/machinery/door/window/brigdoor/southleft{dir = 8; id = "L7 Cell 1"; name = "Cell 1"; req_access = list(2)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"uL" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"uO" = (/obj/random/trash_pile,/obj/effect/floor_decal/rust,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uR" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/four) +"uY" = (/obj/structure/casino_table/craps{dir = 1},/obj/item/weapon/dice,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"uZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"va" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{dir = 1; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"vb" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"vd" = (/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"vf" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 6},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"vg" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"vk" = (/obj/effect/floor_decal/rust,/obj/random/trash_pile,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"vo" = (/obj/machinery/door/airlock/glass{name = "Dock Lounge"},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"vq" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"vr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"vt" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"vu" = (/obj/effect/floor_decal/spline/plain{dir = 5},/obj/item/weapon/stool/padded{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"vx" = (/obj/structure/casino_table/blackjack_m,/obj/machinery/light/floortube{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"vy" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"vN" = (/obj/effect/floor_decal/rust,/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"vO" = (/obj/structure/lattice,/turf/space,/area/space) +"vR" = (/obj/structure/casino_table/blackjack_l{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"vT" = (/obj/effect/floor_decal/rust,/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"vU" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"vZ" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"wb" = (/obj/structure/bed/chair/sofa/left/black{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"wc" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"wd" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"we" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/casino,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"wj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/firedoor/glass/hidden/steel{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"wk" = (/obj/structure/bed/chair/sofa/right/black{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"wl" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"wo" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"wq" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 4"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"wt" = (/obj/structure/cable/green{icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"wu" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"wv" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"ww" = (/obj/structure/table/marble,/obj/effect/floor_decal/spline/plain{dir = 8},/obj/machinery/chemical_dispenser/premium/full{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"wC" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"wG" = (/obj/structure/table/woodentable,/obj/item/trash/asian_bowl,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"wJ" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"wK" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"wL" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"wT" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"wY" = (/obj/structure/bed/chair/sofa/corner/brown{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"xb" = (/obj/structure/table/rack/steel,/obj/random/maintenance,/obj/random/maintenance,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"xd" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"xh" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/embedded_controller/radio/airlock/docking_port{dir = 8; frequency = 1380; id_tag = "l7_dock_d2a3"; pixel_x = 28},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"xm" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/lightgrey/border{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"xn" = (/turf/simulated/wall,/area/awaymission/lucky7/dock2) +"xq" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/yellow/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"xr" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/random/medical,/obj/machinery/light,/obj/random/medical,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"xt" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"xv" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"xz" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"xC" = (/obj/machinery/light,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"xF" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"xH" = (/obj/structure/casino_table/craps,/obj/machinery/light/floortube{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"xJ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/firedoor/glass/hidden/steel{dir = 1},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"xK" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"xL" = (/obj/effect/decal/cleanable/blood/oil,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"xM" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"xN" = (/obj/machinery/holoplant,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"xU" = (/obj/item/weapon/gun/projectile/shotgun/pump{ammo_type = /obj/item/ammo_casing/a12g/pellet; pixel_x = 1; pixel_y = 4},/obj/item/weapon/gun/projectile/shotgun/pump{ammo_type = /obj/item/ammo_casing/a12g/pellet; pixel_x = 2; pixel_y = -6},/obj/structure/table/rack/gun_rack,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/red/bordercorner2,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"xZ" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"yb" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"yf" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"yg" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"yi" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"yk" = (/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"yo" = (/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"yp" = (/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"yv" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"yw" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/grey/border{dir = 5},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"yy" = (/obj/structure/bed/chair/sofa/right/purp{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"yz" = (/obj/machinery/door/airlock/multi_tile/glass{name = "Dock Lounge"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/lounge) +"yA" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"yD" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"yH" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"yO" = (/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"yR" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/door/firedoor/glass,/obj/random/maintenance/foodstuff,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"yX" = (/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"yY" = (/turf/simulated/wall,/area/awaymission/lucky7/arcade) +"yZ" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"za" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"zg" = (/obj/structure/table/gamblingtable,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"zk" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"zp" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"zq" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"zr" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "dock_d1l_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1l_sensor"; pixel_x = 30; pixel_y = 8},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"zv" = (/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"zx" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"zD" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"zE" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"zH" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"zK" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"zM" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"zQ" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"zR" = (/obj/structure/railing{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"zV" = (/obj/effect/floor_decal/rust,/obj/structure/table/steel,/obj/random/tool,/obj/random/maintenance,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"zW" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"zY" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/catwalk,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ab" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"Am" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"Ap" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Ar" = (/obj/effect/floor_decal/rust,/obj/structure/table/rack/shelf/steel,/obj/random/maintenance/engineering,/obj/random/contraband,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"Av" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "dock_d1l"; name = "interior access button"; pixel_x = -28; pixel_y = -26; req_access = list(13)},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Ax" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ay" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "dock_d1a1"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"AF" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"AG" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"AJ" = (/obj/random/trash_pile,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"AK" = (/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 4},/turf/simulated/floor/tiled/freezer,/area/awaymission/lucky7/privateroom/vip) +"AN" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom/three) +"AO" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"AP" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 1},/obj/structure/flora/pottedplant,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"AQ" = (/obj/machinery/vending/deluxe_cigs/open,/obj/effect/floor_decal/spline/plain,/obj/structure/cable/green{icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled/techmaint/airless,/area/awaymission/lucky7/barbackroom) +"AS" = (/obj/structure/bed/chair/sofa/bench,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"AU" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/grey/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"AW" = (/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals6,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"AX" = (/obj/structure/disposalpipe/junction/yjunction{dir = 1},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"AY" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hotelhall) +"Ba" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"Be" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Bf" = (/turf/simulated/wall,/area/awaymission/lucky7/lounge) +"Bi" = (/obj/effect/floor_decal/rust,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Bm" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/maint2) +"Bq" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/grey/border{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Bs" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"BA" = (/obj/structure/closet/secure_closet/bar,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"BE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"BH" = (/obj/structure/bed/chair/sofa/right/black{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"BK" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"BM" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/disposalpipe/junction{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"BQ" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"BT" = (/obj/structure/table/woodentable,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"BV" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/bed/chair/sofa/left/black{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"BW" = (/obj/effect/floor_decal/rust,/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"Cb" = (/obj/structure/table/standard,/obj/item/clothing/under/suit_jacket/really_black{pixel_x = 5; pixel_y = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Cf" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"Ch" = (/obj/machinery/door/airlock/glass_security{req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ci" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"Ck" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Cl" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/bar) +"Cm" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Cn" = (/obj/machinery/door/airlock{id_tag = "br bathroom"; name = "Bathroom"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"Co" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"Cp" = (/obj/machinery/door/airlock/freezer{name = "Freezer"},/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"Cu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"CC" = (/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"CD" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"CE" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/door/firedoor/glass/hidden/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"CG" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"CI" = (/obj/machinery/door/firedoor/glass/hidden/steel{dir = 2},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"CM" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/yellow/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"CN" = (/obj/effect/floor_decal/spline/plain{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"CO" = (/obj/structure/disposalpipe/junction{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"CQ" = (/obj/effect/floor_decal/spline/plain{dir = 9},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"CR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"CU" = (/obj/structure/table/steel,/obj/random/tool,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"CW" = (/obj/structure/table/steel,/obj/item/stack/cable_coil,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"CZ" = (/obj/structure/frame,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Db" = (/obj/effect/floor_decal/spline/plain{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Dg" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"Dh" = (/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"Di" = (/turf/simulated/wall,/area/awaymission/lucky7/workshop) +"Dk" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"Dm" = (/obj/effect/floor_decal/spline/plain{dir = 10},/obj/item/weapon/stool/padded{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Dn" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"Dp" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/obj/effect/floor_decal/techfloor/hole/right{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"Dv" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/bar) +"Dw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Dx" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_coffee/full{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"DD" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"DF" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"DG" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"DH" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"DI" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"DL" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/five) +"DO" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"DP" = (/obj/structure/morgue{dir = 2},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"DQ" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"DR" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"DS" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"DT" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"DY" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"DZ" = (/obj/effect/shuttle_landmark{base_area = /area/space; base_turf = /turf/space; docking_controller = "l7_dock_d1a1"; landmark_tag = "l7_dockarm_d1a1"; name = "Dock D1A1"},/turf/space,/area/space) +"Ee" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "dock_d1a3_pump"},/obj/machinery/light/small,/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1a3_sensor"; pixel_y = -25},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "l7_dock_d1a2"; pixel_y = 28},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/obj/effect/floor_decal/industrial/warning/cee{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Ei" = (/obj/machinery/door/airlock{id_tag = "L7 VIP Room"; name = "VIP Room"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Es" = (/obj/effect/map_helper/airlock/door/int_door,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 8},/obj/machinery/door/airlock/glass_external,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Et" = (/obj/machinery/door/airlock/engineering{name = "Workshop"; req_one_access = null},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Ew" = (/obj/effect/map_helper/airlock/door/int_door,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 8},/obj/machinery/door/airlock/glass_external,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"Ez" = (/obj/structure/table/steel,/obj/item/stack/material/diamond{amount = 50; pixel_x = -5; pixel_y = -5},/obj/item/stack/material/diamond{amount = 50},/obj/item/stack/material/diamond{amount = 50; pixel_x = 5; pixel_y = 5},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"EB" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"EC" = (/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"EF" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"EI" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/gateway) +"EM" = (/obj/effect/floor_decal/techfloor/orange,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"EN" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"EO" = (/obj/machinery/door/airlock/maintenance/common,/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ES" = (/obj/structure/railing,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ET" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"EW" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/obj/structure/railing,/obj/machinery/power/terminal{dir = 1},/obj/structure/cable{icon_state = "0-2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Fa" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance/engineering,/obj/item/device/flashlight/color,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Fd" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"Fj" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"Fl" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Fm" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/grey/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Fp" = (/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"Fr" = (/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"Ft" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_one_access = null},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"Fu" = (/turf/simulated/wall,/area/awaymission/lucky7/bar) +"Fv" = (/obj/item/weapon/stool/padded{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Fw" = (/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"FF" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"FG" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/grey/border,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hotelhall) +"FJ" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"FK" = (/obj/structure/railing,/obj/structure/railing{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FL" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"FN" = (/obj/random/trash_pile,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FQ" = (/obj/effect/landmark/hidden_level,/turf/space,/area/space) +"FT" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-2"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FU" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"FW" = (/obj/random/trash,/obj/machinery/light/small{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"FY" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/obj/effect/floor_decal/rust,/obj/random/contraband,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FZ" = (/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ge" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"Gf" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Gg" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"Gh" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Gi" = (/obj/structure/railing{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Gj" = (/turf/simulated/wall,/area/awaymission/lucky7/hotelhall) +"Gk" = (/obj/structure/table/woodentable,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/carpet/purcarpet,/area/awaymission/lucky7/privateroom/vip) +"Gm" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{icon_state = "1-4"},/obj/machinery/button/remote/airlock{id = "L7 VIP Room"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Gn" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Gp" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Gr" = (/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Gs" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Gz" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"GA" = (/obj/effect/floor_decal/techfloor/orange{dir = 4},/obj/effect/floor_decal/techfloor/hole/right{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"GE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"GH" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"GJ" = (/turf/simulated/wall,/area/awaymission/lucky7/privategameroom/two) +"GO" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"GP" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 8},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"GQ" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/bodybags,/obj/random/maintenance/medical,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"GR" = (/obj/structure/table/standard,/obj/machinery/button/remote/airlock{id = "br bathroom"; name = "Bathroom Lock"; pixel_x = -20; pixel_y = 10; specialfunctions = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"GS" = (/obj/effect/floor_decal/rust,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"GT" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"GV" = (/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"GX" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Ha" = (/obj/machinery/vending/wallmed1/public{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"Hb" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"Hf" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/obj/machinery/light,/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"Hg" = (/obj/effect/floor_decal/borderfloorblack,/obj/structure/bed/chair/sofa/bench{dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"Hl" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Hm" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Hn" = (/obj/structure/table/marble,/obj/machinery/light/floortube{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Ht" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1a1"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Hx" = (/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Hz" = (/obj/random/trash,/obj/structure/railing{dir = 8},/obj/structure/railing{dir = 1},/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"HA" = (/obj/structure/bed/chair/comfy/beige{dir = 1},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"HB" = (/obj/structure/bed/chair/comfy/beige{dir = 1},/obj/machinery/light,/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"HF" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/grille,/turf/space,/area/space) +"HH" = (/obj/effect/floor_decal/rust,/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"HJ" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"HM" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"HQ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 1"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"HS" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"HW" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"HZ" = (/obj/structure/table/rack/steel,/obj/item/weapon/spacecash/c1000{pixel_x = 6; pixel_y = 6},/obj/item/weapon/spacecash/c1000{pixel_x = 3; pixel_y = 3},/obj/item/weapon/spacecash/c1000,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Ig" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Ij" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Ik" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Im" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"In" = (/obj/structure/table/glass,/obj/random/medical,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 8},/obj/item/weapon/tool/screwdriver,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Iq" = (/obj/structure/table/rack,/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = 3; pixel_y = -3},/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = -5; pixel_y = -3},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = 3; pixel_y = 3},/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = -5; pixel_y = 3},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ir" = (/obj/structure/table/glass,/obj/random/soap,/obj/item/weapon/towel/random,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Is" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"It" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"Iu" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"Iv" = (/obj/effect/floor_decal/rust,/obj/random/maintenance,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"Iw" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"IC" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"IF" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"IJ" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"IM" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/reagentgrinder,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"IN" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/grey/border{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"IR" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"IS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Jc" = (/obj/structure/table/steel,/obj/random/cash/huge{pixel_y = 8},/obj/random/cash/huge,/obj/item/weapon/bikehorn{pixel_x = -7; pixel_y = 7},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Jd" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"Jg" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/industrial/danger/corner{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Jj" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Jp" = (/obj/machinery/body_scanconsole{dir = 4},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Jq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Jw" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "casino_check"},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Jy" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Jz" = (/obj/structure/cable/green{icon_state = "2-4"},/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/disposalpipe/junction/yjunction{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"JB" = (/turf/simulated/wall,/area/awaymission/lucky7/barbackroom) +"JC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"JE" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/item/weapon/stool/padded{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"JK" = (/obj/machinery/light/small,/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "l7_dock_d1a1"; pixel_y = 28},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1a1_sensor"; pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "dock_d1a1_pump"},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"JL" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"JN" = (/obj/structure/casino_table/roulette_table,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"JP" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"JR" = (/obj/structure/disposalpipe/junction/yjunction{dir = 1},/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"JU" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/door/firedoor/glass,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"JW" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"Ka" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/bed/chair/sofa/bench/left,/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"Kf" = (/turf/simulated/wall,/area/awaymission/lucky7/kitchen) +"Ki" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Kj" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hall2) +"Kk" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"Kl" = (/turf/simulated/wall,/area/awaymission/lucky7/medical) +"Km" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/alarm{dir = 1; pixel_y = -27},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Kn" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ks" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"Kt" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"Ku" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Kw" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/item/stack/material/phoron{amount = 2},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Kx" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/junction{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KA" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"KC" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"KE" = (/obj/structure/casino_table/blackjack_l,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"KG" = (/obj/machinery/door/airlock,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"KH" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"KI" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KK" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/three) +"KL" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"KM" = (/obj/machinery/door/airlock{id_tag = "L7 Room 4"; name = "Private Room 4"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"KN" = (/turf/simulated/wall/r_wall,/area/awaymission/lucky7/security) +"KR" = (/obj/random/trash_pile,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KS" = (/obj/structure/table/steel,/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"KU" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/effect/floor_decal/sign/dock/two,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"KY" = (/obj/structure/table/rack/steel,/obj/random/maintenance,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KZ" = (/obj/structure/bed/chair/sofa/left/purp{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Le" = (/obj/random/trash_pile,/obj/effect/floor_decal/rust,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Lg" = (/obj/random/trash,/obj/random/trash,/obj/machinery/light/small,/obj/structure/railing{dir = 8},/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"Lh" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"Li" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Lj" = (/obj/machinery/door/airlock{name = "Breakroom"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"Lk" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1l"; name = "exterior access button"; pixel_x = 28; pixel_y = -6; req_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Ll" = (/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -26},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Lo" = (/obj/structure/table/woodentable,/obj/item/trash/bowl,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Lq" = (/obj/item/modular_computer/console{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Lr" = (/obj/structure/closet/crate,/obj/random/tool,/obj/random/tool,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/obj/machinery/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Ls" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/flora/pottedplant/unusual,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Lw" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/vip) +"Lx" = (/obj/structure/salvageable/slotmachine2,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Ly" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/purcarpet,/area/awaymission/lucky7/privateroom/vip) +"LA" = (/obj/structure/bed/chair/comfy/beige,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"LB" = (/obj/structure/salvageable/slotmachine1,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"LC" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"LE" = (/obj/machinery/slot_machine,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"LF" = (/obj/structure/table/steel,/obj/random/tool,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"LI" = (/obj/item/modular_computer/console{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"LJ" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/purpledouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"LL" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/obj/structure/closet/firecloset,/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"LN" = (/obj/structure/table/marble,/obj/random/drinkbottle,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"LO" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/bed/chair/office,/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"LU" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"LV" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/structure/extinguisher_cabinet{dir = 8; pixel_x = 30},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"LY" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Ma" = (/obj/structure/table/steel,/obj/random/tool,/obj/random/tool,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Mb" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Mc" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 7; pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -7; pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 7; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -7; pixel_y = 3},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Md" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/obj/structure/cable/green{icon_state = "0-4"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"Me" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/book/manual/wizzoffguide,/obj/item/weapon/deck/wizoff,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"Mf" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"Mg" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Mh" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/grey/border{dir = 4},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Mk" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1a3"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Mm" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/obj/machinery/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Mn" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/grey/border{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hotelhall) +"Mo" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Mq" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/machinery/vending/cola/soft{dir = 4},/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/lounge) +"Ms" = (/obj/machinery/vending/assist{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/yellow/border{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Mt" = (/obj/structure/bed/chair/sofa/brown,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Mw" = (/turf/simulated/wall,/area/awaymission/lucky7/gateway) +"My" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"MA" = (/obj/structure/flora/pottedplant/stoutbush,/obj/effect/floor_decal/spline/plain{dir = 10},/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/bar) +"ME" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/lightgrey/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"MG" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"MJ" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/lightgrey/border{dir = 6},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/lightgrey/bordercorner2,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"MQ" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"MV" = (/obj/effect/floor_decal/rust,/obj/random/junk,/obj/structure/table/rack/steel,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"MX" = (/obj/structure/table/steel,/obj/item/weapon/tool/wrench{pixel_x = 6; pixel_y = -3},/obj/item/device/multitool{pixel_x = -6},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"MY" = (/obj/effect/floor_decal/rust,/obj/structure/table/steel,/obj/item/stack/material/phoron{amount = 19},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"MZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"Na" = (/obj/structure/table/marble,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Nb" = (/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/structure/closet/secure_closet/brig{id = "Cell 1"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"Nc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Nd" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ng" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "1-8"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Ni" = (/obj/random/trash_pile,/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Nl" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/breakroom) +"Nm" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"No" = (/obj/machinery/door/morgue{dir = 2; name = "Private Room"; req_access = null},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Nq" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Nr" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Ny" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Nz" = (/obj/structure/coatrack,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"NC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/lounge) +"ND" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 5"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"NF" = (/obj/structure/cable{icon_state = "0-8"},/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"NG" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"NI" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"NJ" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"NL" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"NN" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"NQ" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"NR" = (/obj/machinery/button/remote/blast_door{dir = 8; id = "L7 Cell 2"; name = "Cell 2 Door"; pixel_x = 28; req_access = null},/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"NS" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"NT" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "brig_lockdown"; name = "Security Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/security) +"NV" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"NY" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/medical) +"Oa" = (/obj/structure/undies_wardrobe,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Of" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_security{req_one_access = null},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Og" = (/obj/machinery/gateway{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"Oj" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Ok" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ol" = (/obj/item/weapon/stool/padded{dir = 1},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Om" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/flora/pottedplant,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Oo" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Oq" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/firedoor/glass/hidden/steel{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Or" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "dock_d1a1"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Ot" = (/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/structure/closet/secure_closet/brig{id = "Cell 2"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"Ou" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Ow" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Ox" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"OA" = (/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"OB" = (/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/machinery/light/small{dir = 1},/obj/structure/bed/padded,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"OC" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"OE" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"OI" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"OJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"OM" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"ON" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"OO" = (/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/structure/table/steel,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"OP" = (/turf/simulated/wall,/area/awaymission/lucky7/laundry) +"OS" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"OT" = (/obj/machinery/slot_machine,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"OW" = (/obj/effect/floor_decal/rust,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Pa" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Pc" = (/obj/structure/table/steel,/obj/random/maintenance/engineering,/obj/random/junk,/obj/effect/floor_decal/rust,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Pj" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Pk" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/chem_master/condimaster,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Pm" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "dock_d1l_pump"},/obj/effect/map_helper/airlock/atmos/chamber_pump,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Pn" = (/obj/structure/table/rack/steel,/obj/random/maintenance,/obj/random/junk,/obj/random/junk,/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/obj/random/contraband,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Pq" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Ps" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Pu" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"Pw" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"Py" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/book/manual/wizzoffguide,/obj/item/weapon/deck/wizoff,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"PC" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 3"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"PE" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"PF" = (/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"PG" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"PI" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"PJ" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"PN" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"PP" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"PQ" = (/obj/structure/bed/chair/sofa/right/brown,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"PT" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"PV" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/sink/kitchen{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"PX" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_soft/full{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Qa" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"Qd" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Qg" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/medical{name = "Clinic"; req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Qi" = (/obj/machinery/door/airlock,/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"Qm" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/grill,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Qo" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/fryer,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Qp" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/bepis,/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/hotelhall) +"Qq" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Qr" = (/obj/machinery/door/airlock/highsecurity{locked = 1; name = "Safe"; req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Qs" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/lightgrey/border{dir = 5},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Qt" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"Qv" = (/obj/structure/disposalpipe/segment{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Qz" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"QC" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"QD" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"QG" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"QK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"QM" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"QR" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"QU" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"QV" = (/obj/machinery/casino_prize_dispenser,/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"Rb" = (/obj/machinery/sleep_console{dir = 4},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Rc" = (/obj/effect/floor_decal/spline/plain,/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/glass,/obj/random/cash/big{pixel_x = 5; pixel_y = 8},/obj/random/cash/big,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"Rf" = (/obj/machinery/casino_prize_dispenser,/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"Rk" = (/obj/machinery/chipmachine{pixel_y = 32},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Rm" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"Ro" = (/obj/structure/bed/chair/sofa/brown{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Ru" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Rw" = (/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"Rx" = (/obj/effect/floor_decal/spline/plain,/obj/item/weapon/stool/padded{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"RF" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"RH" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"RL" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"RM" = (/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"RN" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"RQ" = (/obj/effect/floor_decal/rust,/obj/structure/table/rack/steel,/obj/random/tool,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"RT" = (/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"RV" = (/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"RW" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"RX" = (/obj/structure/table/woodentable,/obj/item/trash/bowl,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"RY" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"RZ" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/grey/border{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Sd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Sj" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/junction/yjunction{dir = 8},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Sk" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Sl" = (/obj/machinery/door/airlock{id_tag = "L7 Room 4"; name = "Private Room 4"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"Sm" = (/obj/effect/shuttle_landmark{base_area = /area/space; base_turf = /turf/space; docking_controller = "l7_dock_d1a2"; landmark_tag = "l7_dockarm_d1a2"; name = "Dock D1A2"},/turf/space,/area/space) +"Sn" = (/obj/structure/bed/chair/sofa/brown{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Sr" = (/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"Ss" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"Sv" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"Sw" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hotelhall) +"SE" = (/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"SF" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/grey/bordercorner,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"SG" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"SI" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/grey/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"SK" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"SM" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"SO" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/grey/border{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hotelhall) +"SP" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"SR" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"SS" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "dock_d1a3_pump"},/obj/machinery/light/small,/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1a3_sensor"; pixel_y = -25},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "l7_dock_d2a2"; pixel_y = 28},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/obj/effect/floor_decal/industrial/warning/cee{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"SX" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"SY" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"SZ" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 1},/obj/structure/disposalpipe/segment{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ta" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/stack/material/phoron{amount = 6},/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Td" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"Te" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Tf" = (/obj/structure/cable{icon_state = "0-8"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/power/port_gen/pacman{anchored = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Th" = (/obj/machinery/door/window/brigdoor/southleft{dir = 8; id = "L7 Cell 2"; name = "Cell 2"; req_access = list(2)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"Tj" = (/obj/structure/bed/chair/sofa/brown{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Tk" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"Tl" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Tn" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor/eastright{dir = 2},/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "casino_check"; opacity = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ts" = (/obj/structure/flora/pottedplant/stoutbush,/obj/effect/floor_decal/spline/plain{dir = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/bar) +"Tt" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Tu" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"Tv" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Tx" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/decal/cleanable/egg_smudge,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Ty" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"TB" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/industrial/danger/corner{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"TD" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"TF" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/lightgrey/border{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"TH" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"TI" = (/obj/machinery/door/airlock{id_tag = "L7 Room 2"; name = "Private Room 2"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"TK" = (/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"TM" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"TP" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"TQ" = (/obj/machinery/gateway{dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"TR" = (/obj/structure/window/basic,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"TT" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"TU" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"TV" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"TW" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"TX" = (/obj/random/trash_pile,/obj/random/maintenance,/obj/effect/floor_decal/rust,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"TY" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"TZ" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/obj/structure/cable/green{icon_state = "0-4"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"Ub" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Ud" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Uf" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Ug" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Um" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1l"; name = "exterior access button"; pixel_x = 28; pixel_y = -6; req_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"Ut" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Uu" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"Uv" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 5},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"Ux" = (/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"UD" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"UE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"UG" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/orangedouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"UM" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"US" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "dock_d1l_pump"},/obj/effect/map_helper/airlock/atmos/chamber_pump,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"UW" = (/turf/simulated/wall,/area/awaymission/lucky7/trash) +"UY" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Va" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/door/airlock/glass{name = "Kitchen"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Vd" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 2"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Vi" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/machinery/vending/security{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Vk" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Vm" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Vp" = (/obj/machinery/gateway{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"Vs" = (/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Vt" = (/obj/machinery/light,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Vu" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 4},/obj/item/weapon/folder/white,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Vv" = (/obj/effect/floor_decal/spline/plain{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Vw" = (/obj/machinery/slot_machine,/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"Vx" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1a3"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"Vz" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"VC" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/industrial/danger{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"VD" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/greendouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"VO" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"VS" = (/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"VT" = (/obj/structure/table/bench/padded,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"VU" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"VV" = (/obj/effect/floor_decal/spline/plain{dir = 9},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"VW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Wc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Wd" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/structure/extinguisher_cabinet{dir = 8; pixel_x = 30},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Wh" = (/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Wi" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/cigarette{dir = 4},/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/lounge) +"Wj" = (/obj/structure/table/rack,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/red/border{dir = 6},/obj/item/clothing/suit/armor/bulletproof/alt{pixel_x = -6},/obj/item/clothing/suit/armor/bulletproof/alt{pixel_x = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Wm" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"Wp" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Wr" = (/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Ws" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Wu" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Wy" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/yellowdouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"Wz" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"WA" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"WB" = (/obj/machinery/door/firedoor/glass/hidden/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"WC" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/random/donkpocketbox{pixel_x = 1; pixel_y = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"WE" = (/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"WG" = (/obj/effect/floor_decal/spline/plain{dir = 9},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"WI" = (/obj/effect/floor_decal/rust,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"WJ" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"WK" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"WM" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"WP" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"WQ" = (/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/obj/structure/table/standard,/obj/item/device/healthanalyzer,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"WR" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"WU" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"WV" = (/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"WX" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"WZ" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"Xa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"Xf" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Xg" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Xn" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Xo" = (/obj/machinery/gateway{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"Xr" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Xs" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/lightgrey/border{dir = 6},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/lightgrey/bordercorner2,/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Xw" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Xz" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"XA" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"XH" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"XK" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 5},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 5},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"XO" = (/obj/machinery/door/window/eastleft{req_access = null},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"XP" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"XS" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"XT" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"XU" = (/obj/structure/table/woodentable,/obj/item/pizzabox/margherita,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"XZ" = (/obj/effect/decal/cleanable/filth,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Yb" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Yc" = (/obj/structure/cable/green{icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Ye" = (/obj/effect/overmap/visitable/sector/common_gateway/lucky7,/turf/space,/area/space) +"Yj" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Yk" = (/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"Yn" = (/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Yp" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Yw" = (/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Yy" = (/turf/simulated/wall,/area/awaymission/lucky7/entry) +"YA" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"YC" = (/obj/structure/flora/pottedplant{icon_state = "plant-21"},/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"YD" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"YE" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/lightgrey/border{dir = 9},/obj/machinery/alarm{pixel_y = 27},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"YG" = (/obj/machinery/media/jukebox,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"YO" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"YQ" = (/obj/structure/casino_table/blackjack_m,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/floortube{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"YT" = (/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"YX" = (/turf/simulated/wall,/area/awaymission/lucky7/hall1) +"YY" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"YZ" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/door/firedoor/glass/hidden/steel,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Za" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"Ze" = (/obj/structure/table/reinforced,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/ammo_casing/spent,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/red/border{dir = 6},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/red/bordercorner2,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Zf" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/lightgrey/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"Zh" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock{name = "Custodial Closet"; req_access = null},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"Zi" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Zj" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/machinery/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Zu" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/lightgrey/border{dir = 9},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"Zx" = (/obj/structure/bed/chair/sofa/right/purp,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"ZB" = (/obj/structure/bed/chair/sofa/right/brown,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"ZC" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/structure/cable/green,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"ZD" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"ZE" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ZF" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/soap/nanotrasen,/obj/structure/closet,/obj/effect/floor_decal/rust,/obj/item/weapon/storage/bag/trash,/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"ZJ" = (/obj/structure/bed/chair/sofa/brown,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"ZK" = (/obj/structure/bed/chair/sofa/corner/brown,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"ZL" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"ZO" = (/obj/structure/table/steel,/obj/item/weapon/spacecasinocash/c1000{pixel_x = -3; pixel_y = -3},/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"ZP" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/obj/structure/cable/green{icon_state = "0-4"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"ZR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ZT" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom/two) +"ZV" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"ZW" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) + +(1,1,1) = {" +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmcpcpcpcpcprmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmcpcpagavagcpcprmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmcpagayagayagcprmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVpVaAaBaBaBaGpVpVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVaJaQbobubububupVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVbKbKbNcqbubKbKpVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVcDcDbNpVbucDcDpVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVcFcFbNcJbucFcLpVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVbububNbububucMyYyYpbpbpbyYpbpbpbyYyYrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVpVcTbNbubucYpVyYdodzdEdzabdEdzdEdPyYrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVpVpVdSececpVpVyYameFeFeFeHeFeFeFeHpbrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgGKjypflfvfvfvfyyYadeHeHeHeHeHeHeHeHpbrmrmrmrmvOidididvOididididrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmidrmrmrmrmrmrmidrmrmrmrmrmrmrmvOidididvOvOididididvOidvOrmrmrmrmrmrmrmgGfSypgBgNgNgNgNgVgZeHeHeHeHhmhoaeeHpbrmrmrmrmrmvOrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidididvOvOididididvOvOididididvOidvOvOididvOrmrmrmrmrmrmrmrmidrmrmvOrmrmrmvOrmrmrmrmrmrmrmrmrmrmgGKjyphuypypypypyYeHhwafhweHhmiraeeHyYrmrmrmrmrmvOrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmvOrmrmrmrmrmrmvOrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmvOrmrmvOrmrmrmvOrmrmrmrmrmrmrmrmrmrmgGgGgGTuypypgGgGgGgGgGgGgGgGgGgGgGgGgGgGgegegegGgGgGrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmMwMwMwMwMwMwMwMwMwMwYXYXYXYXYXrmvOrmrmrmrmrmrmrmrmrmidrmUWUWUWUWUWUWUWUWrmrmrmrmrmrmrmrmgGdwitiBypypypypypypypTkypypypypypTkypypypypypypjbgGvOvOvOidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmMwmDoqaatVucueASKaMwZuZLuLlBYXrmvOrmrmrmrmrmrmrmrmrmvOrmUWjejljKjVVSkeUWrmrmrmrmrmrmrmrmgekxkxmOgNgNgNgNgNgNgNopgNgNgNgNgNopgNgNgNgNgNqHkFgGrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmMwcKcbbfTQiETMuEUvEIzpYkYkobYXrmidrmrmrmrmrmrmrmrmrmidrmUWkJkNlhlilpVSUWrmrmrmrmrmrmrmrmgelwlwTuypypypypypypypMZypypypypypMZypypypypypMZjbgGrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOvOidididvOidMweSVpMyrbGATMuEbchMYTFFYkCDYXvOidvOidididvOididvOididrmUWrxmNkeHzmTFWUWrmrmrmrmrmrmrmrmgemXmXTuypypnhnhbpbpbpnEbpbpGJGJGJnMGJGJfHfHfHohfHfHfHrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmMwDpOgmHXoiETMuEvfEIHWWEYkobYXrmrmrmrmrmvOrmrmrmrmvOvOvOUWVSmNkJLgskiGUWrmrmrmrmrmrmrmrmgGypypTuypypLEVwbppsRMpyRMRMGJMefNpBfNfNfHPyFrqdFrFrfHvOididrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmMwrfEMiZEMsUpAHgrKMwWRWEYkobYXrmrmrmrmrmvOrmrmrmrmvOrmrmUWVSmNqkUWoFmIUWrmrmrmrmrmrmrmrmgGypypTuypypvyvybpRMrepNreRMGJfNDnlZDnfNfHFrItLAItFrfHrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmDiDiDiDiDiDiDiDiDiDinAWEYkJLsTsTsTsTsTsTsTsTsTsTsTsTsTsTsTUWrAUWUWUWUWUWqFNlNlNlqFqFqFqFqFkxkxTuypypnhnhbpMdCGAGscsqGJTZnvWmxtwTfHZPQttYlLYYfHrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmDisHsSsZsZtdtvtHtMDiWRWEYkupsTeruyuzuIrprMsThhhhjPFNuOuvhhhhvavksTvNvTsTvUwbwewkwtqFImbXqFwGlwTuypypLEVwbpwLscQascxdGJNVxtqMxtrBfHLhlLtZlLwlfHrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOvOvOvODixqyoyHCCCCCCzazgSXzpWEYkobsTGSzqzEaWzRzYAxQKQKQKQKQKAFAFQKAXAFAxQKBeBmBEBHBTBVCiCnruCoqFmXmXTuypypvyvybprUscscscsqGJqYxtxtxtwTfHpPlLlLlLYYfHrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmididvOididrmvOrmDiCMCUCWCZCCCCDHYnEtXSEBYkCDsTcmECESEWFKFTsTFUFYhhFZhhFNjPGiGiGisThhWVsTSrGzKLSrGHqFGRHaqFypypTuypypypypbpRMHbHfHbRMGJfNNIoHNIfNfHFrHAHBHAFrfHvOidHFrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmvOrmDixqCCCCCCCCHJCCHMSXHWJzXSJPJUKiKnbDKwKxKIkDkDkDKNKNKNKNKNKShhKYsThhGrsTqFLjqFqFqFqFqFqFqFmKmKOwmVmVmKmKbpbpbpbpbpbpGJGJGJGJGJGJfHfHfHfHfHfHfHrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmvOrmrmrmrmvOrmDiaXLrLxLBLFMaMmMsDiMEMGYkMJsTMVMXMYNdNyNFkDQCNRNTOtOBOOKNPcOWPnsTjPLiKfPqPsPTPVQmQoGsQGKfmVQMOwmVmVkVmVQRmVQVRcRfmVRkmVkVRTRVmVmVmVmVkVmVmVmKrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlKlNYNYNYKlKlKlKlKlKlKlKlKlKlKlYXYXsoSEWBsoYXYXYXYXSRTaTfkDyOyOThDhDhDhKNKNKNKNKNhhLiKfTyUbUdUfUgUgUgUgVamVVkahmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVVVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlWhWpWpWpWrKlWQXfXHXOWpYbYAYCKlYEalXzMGYkZfZBZJZKYXsTaRsTkDyOZiKNKNKNKNKNZOKuHZKNFaLiKfeYUgKmnCUgUgUgTxKfmwkQsiHmHmfcmVmVmVmVmVmVmVmVmVmVaVJNmVmVuFanmVmVfUrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlHxJpeaInDYWpIkWUWUUtWUWUWUXKfMzpYkYkMGYkobGXXgSnYXKRyXzVkDyOpHNTNbOBOOKNEzVsHZKNuAGrKfKfCpKfKfUgbyPkUgXwmVkQsijxbCfcPJmKWXmVrThDPJmKWXmVmVmVmVmVmVmVmVmVaqrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidvOvOKlzvWUWUWUWUWUWUWUNGenWUWUWUYcQgXSzQXSSPYkRHGXGXRoYXKRsMRQkDyOyOuJDhDhDhKNJcVsHZKNhhGrKfczlSlSKfUgSMWCUgXwmVkQVWmVmVmVmVmVmVngbPhDmVmVmVmVmVmVmVmVmVmVmVmVmVmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlLlRbsgpkPGgUNJWUWUVuWUWUWUmqfMHWJCYkWEYkobGXRXSnYXxLyXxbkDyOZiKNKNKNKNKNKNQrKNKNuvGrKfmulSnNKfkOIMapUgyRmVkQsiHmqAfcmVmVmVmVqShDmVmVmVmVaVJNmVmVxHuYmVmVPJmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlnDAWLCgUasKlkvQUxrGPgUygXrZCKldnarqUWEYkMJdCTjwYYXBiIwFNkDyOyOUxPFOfyOLsSZQvtQkDNiGrKftelSejKfTxUgUgUgKfWXkQsiHmNSfcmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmKlKlFtKlKlKlKlKlKlKlKlKlKlKlKlYyYyYykmFwuakmkmkmYyYysTemsTYyiVyOyOyOChyOPIyOyOOkkDsTEOKfKfKfKfKfVaKfXwKfKfNzkQVWmVmVmVPJmKWXmVmVmVPJmKWXmVmVmVmVmVmVmVmVmVmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlGQfZDPDPDPKlkswowomowowoBKwokmxmOjybykazPEOjOjcNddOjBMQsYykDChkDkDkDCkPIQCyOVikDTXLiJBtmAQnnJBCQVvrZDbkLvukQsiNSHmfcmVmVmVmVmVmVmVmVmVmVaVJNmVmVxHaumVmVmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidvOidvOvOKlfZjvfZfZfZKloPwoTeTeTewooDlIvoISISISTKTtTtTtTtTtTtTtWuIsYyiMyOawLLkDQzpMoTaxLqkDLeaoQiPPibogKGOMOAhSOALNtokQsiHmLofcmVmVmVMgaUaCdWdWdWdWdWdWdWdWdWdWdWdWnjmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlKlKlKlKlKlKlwowoDGMbxvwowowokmhFZEZEZjZEZEZEZEZjZEUDxzeGYynqyOyOJwkDTYmppXyOeLkDjPhhJBRWogBAJBwwOAdaOAtEJEkQVWmVmVmVmVmVmVFvaEhDmVmVmVmVmVmVmVmVmVmVmVmVPJmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmBfVTVTiywowoBfQdwovZvZvZwowoHSluluFJlulululululululuCECIVzYyLIaFyOZekDFLmpxUIqWjkDFZhhJBkPrNEFJBhNXZOAOAhSJEkQsiHmLUfcPJmKWXVWqShDPJmKWXmVmVngvRmVmVmVrThDmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmBfbabaVTwowoNowowowowowowowoPXlufbxZBWfbAJpOluqwArluETxzPjYykDgiTnkDkDkDpekDkDkDkDsTmdJBJBJBJBJBNawdHnLNhSJEkQsizMHmfcmVQRmVVWmVmVmVRkmVmVmVngnahDmVngaEhDmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmBfqLbaVTwowoNowowoTeTeTewowoDxluAJepmWepepxZFJxZxKluETxzaznlTBVCVCJgOjybxzPEOjYjrwzxzxDQMAsXTsYGDmRxRxRxRxhnkQVWmVmVmVmVmVmVVWmVmVmVmVmVmVmVngaImVmVmVqShDmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidvOvOBfbabaVTwowoNowowossMbDGwowoMcluWIeplumtcRIvluepepluONaKTtXnTtTtTtTtTtTtHlTtTtTtDvuZuZNguZuZuZuZuZuZuZuZuZBshidGTRTRTRTRWcWcSjmVmVbjbjbjbjbjmVmVmVYDmVmVmVatmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmBfVTVTnRwowoBfQdwovZvZvZwowoHSlulupLlululululutsjcjpduaLaznlbLZEZjZEZEZEZEZjZEUDrwzxzxzxzxzxzxzxzxzxzxzxzxPamVOTOTOTOTOTmVKEYQaMmVOTOTOTOTOTmVmVKEvxaMmVmVjJmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmBfBfBfBfBfBfBfwowowowowowowowolusmoVlubxhcHHlubERmluipSYaNYyYyYyYyYyYyYyYyYyYyYyFuzxGfGfGfzxGfGfGfzxGfGfGfPamVxMxMxMxMxMmVlnOllnmVxMxMxMxMxMmVmVlnlnlnmVmVVVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmvOvOvOvOBfWiOxwoPQMteowowokpMQludFoEZhFVRNBalumhgSlugxSYeGYyvOvOvOrmrmrmrmrmvOvOFutDXUuHfizxfiSKXTzxfiuHqGPamVbjbjbjbjbjmVmVJqmVmVbjbjbjbjbjmVmVbjbjbjmVmVrnrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidididvOidvOYyYyYyBfMqOxwoDGMbyABQwonpwoludrUEluZFaPmJlukaCRluETSYeGYyvOrmvOrmrmrmrmvOvOrmFuilYpYpYpzxYpYpYpzxYpYpYpPamVOTOTOTOTOTmVmVJqmVmVOTOTOTOTOTmVmVOTOTOTmVmVaqrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmYyYydgfXBfBfBfBfqNqNqNBfyzNCBfluluyZlulululululululuCExJVzYyididvOidididvOidvOidFulmzxzxzxApzxzxzxApzxzxzxWsxCxMxMxMxMxMxCmVJqmVxCxMxMxMxMxMxCmVxMxMxMxCmVmVmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmYygrivivGniAOjOmmRmRmRAPazsVufaSiAcIOmLOgamROmOjGnOjYjSYeGYyrmrmvOrmrmrmvOrmrmrmFuFuClClClFuClClClFuClClClFuOPOPOPOPOPOPGjeUTDeUGjmKmKmKmKmKmKmKmKmKmKmKmKmKmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidididvOYyONiJjdNrjrNcNcNcNcNrNrNrKHNrGVsvNqZRZRZRZRZRZRZRZRZRDDIsYyrmrmidrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOPRZqWBqAUywGjeUTDeUGjrmrmvOrmrmrmrmrmrmrmrmvOrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmYyjBkbkcZEfuZEZEZEZjZEZEZEZEZEZEfuZEZEkzZEZEZEZEZEZEZEGTTFYyvOidvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmSkSINNosmvFmGjeUTDeUSwrmrmvOrmrmrmrmrmrmrmrmidrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmgLlqmLmSgLgLVOVOVOgLYykmkmkmYyYykmkmkmYyYykmkmkmYyxnWMTHWMxnrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmSkSIsBosCbMhGjeUTDeUSwrmididididididvOvOidididvOidvOvOidvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLnsWAnSgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnajDOjHxnrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmSkSINNosolINGjeUTDeUSwrmrmrmrmrmrmvOrmvOrmrmidrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmOPcOaOosSFrgGjeUTDeUGjrmrmrmrmrmrmvOGjGjGjGjvOrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmGjGjGjGjGjGjMnFGSOGjGjeUTDeUGjGjGjGjGjGjGjGjGjQpqgGjGjGjGjrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmcHvOvOGjAYeUeUeUeUNmCNTUeUvbeUTDeUvbeUeUeUvdYweUakaTNmNmvbeUfOGjrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLspWAttgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxneVGhfAxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmGjoYGOIgIgIgCORuDSIgCOIgJRIgTWIgIgIgTWIgIgSdFleUeUeUeUdfGjvOvOidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmGjAYTDeUVteUTDeUeUeUTDeUVteUTDeUeUeUTDeUVteUTDeUeUeUeUfOGjrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOididcHvOvOhOhOfDhOuuuuTIuuKKKKeWKKuRuRKMuRDLDLSlDLLwLwEiLwLwLwLwLwLwrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmhOjMHQKtuuDwVdyvKKoSPCIJuRaiwqwKDLzHNDIuLwoAGmqsuBoAIjoALwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLuxwjwvgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnYZOqqzxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmhOjChUfTuuCmoOJyKKENnzghuRccxFbnDLJWXaKCLwffOJZxorkdkdLyLwrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmhODgGgiauuOonYMoKKdytzjQuRKAZVPuDLmCIFRFLwOaOJpnlxkdkdqvLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmhOtpcrWyuusQcnLJKKTdvgUGuRAbNQVDDLtGUMeyLwjAcGKZyykdkdGkLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidvOvOhOcrcrWKuucncnTTKKvgvgzWuRNQNQXPDLUMUMkyLwoAoAoAoAoAJjvqLwvOvOidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLspWAwJgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxneVGhyDxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmhOuGhOhOuuGeuuuuKKpEKKKKuRFduRuRDLICDLDLLwRYLwLwLwLwLwLwLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmzkububDFDRWAQqDTubgfAmrmrmrmrmrmrmrmrmrmrmrmrmrmrmkhiuiujoWPGheteiiubhbHrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmhOWZwuwCuuPNevAOKKtrjWeduRyiyfDkDLdZSsJdLwOuTlGpAKWGUuDILwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmDZrmHtJKKTVmOrtJvrEsbeEeMkrmSmrmrmrmrmrmrmrmrmrmrmrmrmprbtlFnKAyKUCuEwGESSVxrmcVrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmhOQDWZWZuuSGPNPNKKVUtrtruRZayiyiDLZDdZdZLwTvOuOuAKeCRwqBLwrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmPwRLRLDFTPWAOIDTRLaHTVrmrmrmrmrmrmrmrmrmrmrmrmrmrmjNMfMfjoOEGhXAeiMfNLgDrmrmrmrmrmrmrmrmrmrmrmrmrmididvOvOhOWZYOfQuuPNIRZTKKtrbBANuRyivtaDDLdZCfhyLwIrOuOuAKeCjSbwLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLUYWAWdgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnOSGhLVxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmhOhOhOhOuuuuuuuuKKKKKKKKuRuRuRuRDLDLDLDLLwTvOuOuAKeCjSqBLwvOvOvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmvOrmrmrmvOrmrmrmvOrmrmrmvOrmvOrmLwOuOuxNAKFpjqSvLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmvOrmrmrmvOrmrmrmvOrmidvOLwLwLwLwLwLwLwLwLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOZWWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCfxGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOididlEidididcHidvOvOcHidvOidcHididrmrmvOrmrmrmrmrmvOrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLjIWAXsgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnAvGhdXxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmidrmrmrmrmrmrmrmrmrmvOididcHvOididvOidcHididvOvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLwcWJDFgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnWzmbjoxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmKknwacezrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmtcKsxhgHrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmKkPmzrezrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmtcUShIgHrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmhqmELkmQrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmFjjtUmzDrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmqtrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmYeFQrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +"} diff --git a/maps/gateway_vr/snowfield.dmm b/maps/gateway_vr/snowfield.dmm index 7292de11f1..1912a56992 100644 --- a/maps/gateway_vr/snowfield.dmm +++ b/maps/gateway_vr/snowfield.dmm @@ -1188,7 +1188,7 @@ /turf/simulated/floor/tiled/dark, /area/awaymission/snowfield/base) "ds" = ( -/obj/structure/closet/fireaxecabinet{ +/obj/structure/fireaxecabinet{ pixel_y = 32 }, /turf/simulated/floor/tiled/dark, diff --git a/maps/gateway_vr/wildwest.dm b/maps/gateway_vr/wildwest.dm index e697c3812d..2260db08ed 100644 --- a/maps/gateway_vr/wildwest.dm +++ b/maps/gateway_vr/wildwest.dm @@ -125,7 +125,7 @@ if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) for(var/mob/O in viewers(world.view, src.loc)) - to_chat(O, "[M] triggered the [bicon(src)] [src]") + to_chat(O, "[M] triggered the \icon[src][bicon(src)] [src]") triggered = 1 call(src,triggerproc)(M) @@ -187,7 +187,7 @@ in_space = 1 unknown_state = "field" known = FALSE - + skybox_icon = 'icons/skybox/anomaly.dmi' skybox_icon_state = "shimmer_r" skybox_pixel_x = 0 diff --git a/maps/groundbase/gb-mining.dm b/maps/groundbase/gb-mining.dm index 27cd9c6a0a..c4ee180a40 100644 --- a/maps/groundbase/gb-mining.dm +++ b/maps/groundbase/gb-mining.dm @@ -8,7 +8,7 @@ "uranium" = 10, "platinum" = 10, "hematite" = 20, - "carbon" = 5, + "carbon" = 20, "diamond" = 1, "gold" = 8, "silver" = 8, @@ -21,7 +21,7 @@ "uranium" = 5, "platinum" = 5, "hematite" = 35, - "carbon" = 5, + "carbon" = 35, "gold" = 3, "silver" = 3, "phoron" = 25, @@ -32,10 +32,10 @@ UpdateMineral() update_icon() -/datum/random_map/noise/ore/mining - descriptor = "asteroid field ore distribution map" - deep_val = 0.2 - rare_val = 0.1 +/datum/random_map/noise/ore/gb_mining + descriptor = "groundbase underground ore distribution map" + deep_val = 0.7 + rare_val = 0.5 /datum/random_map/noise/ore/mining/check_map_sanity() return 1 //Totally random, but probably beneficial. diff --git a/maps/groundbase/gb-z1.dmm b/maps/groundbase/gb-z1.dmm index 8a44ae02c3..940a39e7ca 100644 --- a/maps/groundbase/gb-z1.dmm +++ b/maps/groundbase/gb-z1.dmm @@ -489,6 +489,14 @@ lel outdoors = 0 }, /area/groundbase/security/lobby) +"bq" = ( +/obj/machinery/vending/wardrobe/atmosdrobe, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/sign/scenery/fakefireaxe{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/groundbase/engineering/atmos/monitoring) "br" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -529,6 +537,7 @@ lel /turf/simulated/floor/outdoors/sidewalk/virgo3c, /area/groundbase/level1/westspur) "bw" = ( +<<<<<<< HEAD /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/glass{ name = "Teleporter" @@ -540,6 +549,13 @@ lel /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/bmarble, /area/groundbase/civilian/arrivals) +======= +/obj/structure/closet/toolcloset, +/obj/item/weapon/pickaxe, +/obj/item/weapon/chainsaw, +/turf/simulated/floor/tiled, +/area/groundbase/engineering/workshop) +>>>>>>> c527964372... Merge pull request #13346 from Heroman3003/doubleclosets "bx" = ( /obj/structure/table/reinforced, /obj/item/device/floor_painter, @@ -597,10 +613,18 @@ lel /turf/simulated/floor/tiled, /area/groundbase/security/processing) "bD" = ( +<<<<<<< HEAD /obj/structure/table/woodentable, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/carpet/turcarpet, /area/groundbase/civilian/gameroom) +======= +/obj/structure/closet/secure_closet/engineering_electrical/double, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/turf/simulated/floor/tiled, +/area/groundbase/engineering/workshop) +>>>>>>> c527964372... Merge pull request #13346 from Heroman3003/doubleclosets "bE" = ( /obj/structure/cable/yellow{ icon_state = "0-8" @@ -640,6 +664,7 @@ lel /turf/simulated/floor/tiled/dark, /area/groundbase/security/armory) "bH" = ( +<<<<<<< HEAD /obj/effect/floor_decal/techfloor/orange{ dir = 4 }, @@ -654,6 +679,15 @@ lel }, /turf/simulated/floor/tiled/techfloor, /area/groundbase/civilian/arrivals) +======= +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light, +/obj/structure/closet/secure_closet/engineering_welding/double, +/turf/simulated/floor/tiled, +/area/groundbase/engineering/workshop) +>>>>>>> c527964372... Merge pull request #13346 from Heroman3003/doubleclosets "bJ" = ( /turf/simulated/floor/outdoors/newdirt_nograss/virgo3c, /area/groundbase/level1/eastspur) @@ -1830,11 +1864,6 @@ lel }, /turf/simulated/floor/tiled/white, /area/groundbase/civilian/bar) -"ez" = ( -/obj/structure/closet/toolcloset, -/obj/item/weapon/pickaxe, -/turf/simulated/floor/tiled, -/area/groundbase/engineering/workshop) "eA" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -3135,14 +3164,6 @@ lel /obj/machinery/light, /turf/simulated/floor/tiled, /area/groundbase/cargo/mining) -"hS" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/groundbase/engineering/workshop) "hT" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, @@ -5319,6 +5340,7 @@ lel }, /obj/item/clothing/glasses/welding/superior, /obj/item/device/flashlight/lamp, +/obj/item/weapon/stamp/ce, /turf/simulated/floor/carpet/oracarpet, /area/groundbase/engineering/ce) "nf" = ( @@ -9005,11 +9027,6 @@ lel /obj/item/weapon/hand_labeler, /turf/simulated/floor/carpet, /area/groundbase/security/detective) -"vS" = ( -/obj/machinery/vending/wardrobe/atmosdrobe, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/groundbase/engineering/atmos/monitoring) "vT" = ( /obj/machinery/atmospherics/portables_connector{ dir = 8 @@ -13247,12 +13264,6 @@ lel }, /turf/simulated/floor/tiled, /area/holodeck_control) -"FW" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor/tiled, -/area/groundbase/engineering/workshop) "FX" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass_security/polarized{ @@ -18736,6 +18747,7 @@ lel departmentType = 2; pixel_y = 30 }, +/obj/item/weapon/gun/energy/mouseray/medical, /turf/simulated/floor/tiled/white, /area/groundbase/medical/equipment) "To" = ( @@ -35223,14 +35235,14 @@ pe Wl VC XJ -ez +bw zv NY ER jf BH -FW -hS +bD +bH JM ph aE @@ -36641,7 +36653,7 @@ Lt Lt Lt iS -vS +bq wu aM iS diff --git a/maps/groundbase/gb-z2.dmm b/maps/groundbase/gb-z2.dmm index 40f2faadc9..c307b229ec 100644 --- a/maps/groundbase/gb-z2.dmm +++ b/maps/groundbase/gb-z2.dmm @@ -515,9 +515,6 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/white, /area/medical/virology) -"bt" = ( -/turf/simulated/wall/r_wall, -/area/groundbase/science) "bu" = ( /obj/machinery/door/airlock/freezer{ name = "Kitchen"; @@ -2131,6 +2128,13 @@ outdoors = 0 }, /area/groundbase/cargo/office) +"go" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small/fairylights{ + pixel_y = -2 + }, +/turf/simulated/floor/outdoors/sidewalk/virgo3c, +/area/groundbase/level2/nw) "gq" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -4039,6 +4043,10 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/Chemistry) +"lM" = ( +/obj/machinery/light/small/fairylights, +/turf/simulated/floor/outdoors/grass/virgo3c, +/area/groundbase/level2/nw) "lN" = ( /obj/structure/cable/yellow{ icon_state = "1-8" @@ -4919,6 +4927,12 @@ outdoors = 0 }, /area/groundbase/level2/se) +"oG" = ( +/obj/machinery/light/small/fairylights{ + pixel_y = -1 + }, +/turf/simulated/floor/outdoors/grass/virgo3c, +/area/groundbase/level2/nw) "oH" = ( /turf/simulated/open/virgo3c, /area/groundbase/level2/eastspur) @@ -7392,8 +7406,19 @@ /obj/machinery/light_switch{ pixel_y = 30 }, +<<<<<<< HEAD /turf/simulated/floor/tiled/dark, /area/groundbase/civilian/chapel) +======= +/turf/simulated/floor/tiled/white, +/area/groundbase/dorms/room1) +"wl" = ( +/obj/machinery/light/small/fairylights{ + pixel_y = -1 + }, +/turf/simulated/floor/outdoors/newdirt/virgo3c, +/area/groundbase/level2/nw) +>>>>>>> 3c288de197... Merge pull request #13353 from Very-Soft/backtogb "wm" = ( /obj/machinery/computer/supplycomp/control{ dir = 8 @@ -10352,6 +10377,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/white, /area/medical/virology) +"EZ" = ( +/obj/machinery/light/small/fairylights, +/turf/simulated/floor/outdoors/newdirt/virgo3c, +/area/groundbase/level2/nw) "Fa" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -11152,6 +11181,18 @@ }, /turf/simulated/floor/bmarble, /area/groundbase/civilian/chapel) +"Hr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small/fairylights{ + pixel_y = -2 + }, +/turf/simulated/floor/outdoors/sidewalk/virgo3c, +/area/groundbase/level2/nw) "Hs" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -22339,7 +22380,7 @@ Rh EJ YI ng -bt +PD AH lO Ga @@ -22481,7 +22522,7 @@ Rh bO AZ ff -bt +PD IO qW PZ @@ -22623,7 +22664,7 @@ Rh ff AZ ff -bt +PD nw qW lw @@ -22765,7 +22806,7 @@ Rh Fk AZ yw -bt +PD ws qW lw @@ -22907,7 +22948,7 @@ Rh vh Nb Ys -bt +PD aB PR lw @@ -23049,7 +23090,7 @@ Rh PD qU PD -bt +PD Ov PR lw @@ -23704,13 +23745,13 @@ bY bY pw pw -LT +lM ml LT -pw +EZ pw bY -bY +lM bY bY bY @@ -23846,13 +23887,13 @@ bY bY bY bY -pw +wl ml pw +oG bY bY -bY -bY +oG bY bY bY @@ -23988,13 +24029,13 @@ Hm Hm Hm Hm -Hm +Hr pJ sF -sF +go sF vV -sF +go sF sF sF @@ -24130,13 +24171,13 @@ bY bY bY bY -pw +wl sN pw -bY +oG bY Oa -bY +oG bY bY bY @@ -24272,13 +24313,13 @@ bY bY bY bY -yS +lM sN bY -bY +lM bY Oa -yS +lM bY Aq bY diff --git a/maps/groundbase/gb-z3.dmm b/maps/groundbase/gb-z3.dmm index 65142980a0..1b508e0571 100644 --- a/maps/groundbase/gb-z3.dmm +++ b/maps/groundbase/gb-z3.dmm @@ -5,6 +5,13 @@ lol "aa" = ( /turf/simulated/wall, /area/groundbase/exploration/equipment) +"ab" = ( +/obj/machinery/suit_cycler/medical, +/obj/structure/sign/scenery/fakefireaxe{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/groundbase/medical/paramedic) "ak" = ( /obj/structure/table/glass, /obj/item/weapon/paper_bin, @@ -2293,6 +2300,23 @@ lol }, /turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, /area/groundbase/level3/nw) +<<<<<<< HEAD +======= +"OJ" = ( +/obj/effect/landmark/start/pilot, +/obj/structure/closet/walllocker_double{ + dir = 8; + name = "NIFsoft uploader cabinet"; + pixel_x = -32 + }, +/obj/item/weapon/storage/box/nifsofts_pilot, +/turf/simulated/floor/tiled, +/area/groundbase/civilian/pilot) +"OT" = ( +/obj/structure/lattice, +/turf/simulated/open/virgo3c, +/area/groundbase/dorms/bathroom) +>>>>>>> 8de672043e... Merge pull request #13370 from FirstSgtDan/nifsoft "Pd" = ( /obj/item/device/radio/intercom{ pixel_y = -24 @@ -5240,7 +5264,7 @@ Qa qO fz bm -Tk +OJ pd Tk bm @@ -16476,7 +16500,7 @@ ID lz Cv Vm -og +ab to to Qk diff --git a/maps/groundbase/groundbase_areas.dm b/maps/groundbase/groundbase_areas.dm index 1943cc2611..92db5129a9 100644 --- a/maps/groundbase/groundbase_areas.dm +++ b/maps/groundbase/groundbase_areas.dm @@ -357,6 +357,8 @@ /area/groundbase/civilian/arrivals name = "Arrivals" lightswitch = 1 + forbid_events = TRUE + forbid_singulo = TRUE /area/groundbase/civilian/toolstorage name = "Tool Storage" lightswitch = 1 @@ -408,17 +410,16 @@ /area/groundbase/civilian/gameroom name = "Gamatorium" sound_env = SMALL_SOFTFLOOR -<<<<<<< HEAD -======= /area/groundbase/civilian/mensrestroom name = "Men's Restroom" sound_env = SOUND_ENVIRONMENT_BATHROOM lightswitch = 1 + forbid_events = TRUE /area/groundbase/civilian/womensrestroom name = "Women's Restroom" sound_env = SOUND_ENVIRONMENT_BATHROOM lightswitch = 1 ->>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks + forbid_events = TRUE /area/groundbase/exploration name = "Exploration" @@ -441,6 +442,7 @@ limit_mob_size = FALSE block_suit_sensors = TRUE forbid_events = TRUE + forbid_singulo = TRUE /area/groundbase/dorms/bathroom name = "Dormitory Bathroom" @@ -550,4 +552,4 @@ excluded |= /area/groundbase/level3/se/open excluded |= /area/groundbase/level3/sw/open excluded |= /area/groundbase/level3/escapepad - ..() \ No newline at end of file + ..() diff --git a/maps/groundbase/groundbase_defines.dm b/maps/groundbase/groundbase_defines.dm index 6bb4c0a27f..0525941653 100644 --- a/maps/groundbase/groundbase_defines.dm +++ b/maps/groundbase/groundbase_defines.dm @@ -124,6 +124,9 @@ default_skybox = /datum/skybox_settings/groundbase unit_test_exempt_areas = list( //These are all outside + /area/groundbase/cargo/bay, + /area/groundbase/civilian/bar/upper, + /area/groundbase/exploration/shuttlepad, /area/groundbase/level1, /area/groundbase/level1/ne, /area/groundbase/level1/nw, @@ -140,11 +143,20 @@ /area/groundbase/level2/nw, /area/groundbase/level2/se, /area/groundbase/level2/sw, + /area/groundbase/level2/northspur, + /area/groundbase/level2/eastspur, + /area/groundbase/level2/westspur, + /area/groundbase/level2/southeastspur, + /area/groundbase/level2/southwestspur, /area/groundbase/level3, /area/groundbase/level3/ne, /area/groundbase/level3/nw, /area/groundbase/level3/se, /area/groundbase/level3/sw, + /area/groundbase/level3/ne/open, + /area/groundbase/level3/nw/open, + /area/groundbase/level3/se/open, + /area/groundbase/level3/sw/open, /area/maintenance/groundbase/level1/netunnel, /area/maintenance/groundbase/level1/nwtunnel, /area/maintenance/groundbase/level1/setunnel, @@ -184,6 +196,11 @@ unit_test_exempt_from_atmos = list() + unit_test_z_levels = list( + Z_LEVEL_GB_BOTTOM, + Z_LEVEL_GB_MIDDLE, + Z_LEVEL_GB_TOP + ) lateload_z_levels = list( list("Groundbase - Central Command"), @@ -423,7 +440,7 @@ . = ..() // seed_submaps(list(Z_LEVEL_MINING), 60, /area/gb_mine/unexplored, /datum/map_template/space_rocks) //POI seeding new /datum/random_map/automata/cave_system/no_cracks(null, 3, 3, Z_LEVEL_MINING, world.maxx - 4, world.maxy - 4) - new /datum/random_map/noise/ore/mining(null, 1, 1, Z_LEVEL_MINING, 64, 64) + new /datum/random_map/noise/ore/gb_mining(null, 1, 1, Z_LEVEL_MINING, 64, 64) /datum/map_z_level/gb_lateload/mining z = Z_LEVEL_MINING @@ -558,5 +575,8 @@ */ //////////////////////////////////////////////////////////////////////// +<<<<<<< HEAD >>>>>>> ae6ecf6fb4... Merge pull request #12817 from Very-Soft/gbwilds +======= +>>>>>>> 26e29da7c4... Merge pull request #13242 from ItsSelis/selis-multiz diff --git a/maps/groundbase/groundbase_poi_stuff.dm b/maps/groundbase/groundbase_poi_stuff.dm index 60b200939c..8095e4d71f 100644 --- a/maps/groundbase/groundbase_poi_stuff.dm +++ b/maps/groundbase/groundbase_poi_stuff.dm @@ -1060,7 +1060,11 @@ name = "wide building 6" mappath = 'southwilds/villagepois/wide6.dmm' /area/submap/groundbase/poi/wildvillage/wide/wide6 - +/obj/item/weapon/paper/wide6 + name = "\improper hand written letter" + info = {"It is hard for me to write this out, and I hope you will be back soon, but I fear that by the time you return I will already be gone. I will try my best to hold on, but even as I write this, I can feel myself slipping.

    + I know that you all do not believe me but I really can see them, just beyond the walls, and they're even closer now than they were before. I can see them even when I close my eyes. Seven golden eyes watch me, and I can feel their heat pouring into me. As they come closer, I can feel myself being tugged in. Like I'm a little lost moon being tugged into the embrace of a passing star.

    It still doesn't hurt. It's getting hard to see anything else, and I can't move anymore. I feel like everything is going to be okay. If you see seven eyes, don't be afraid. Just promise you'll come find me, okay?

    + I'll keep hol"} /datum/map_template/groundbase/wildvillage/long/long1 name = "long building 1" diff --git a/maps/groundbase/southwilds/villagepois/wide5.dmm b/maps/groundbase/southwilds/villagepois/wide5.dmm index 170e791a89..a106381ee3 100644 --- a/maps/groundbase/southwilds/villagepois/wide5.dmm +++ b/maps/groundbase/southwilds/villagepois/wide5.dmm @@ -59,7 +59,7 @@ layer = 3.3; pixel_y = 30 }, -/turf/simulated/floor/carpet/deco, +/turf/simulated/floor/carpet/geo, /area/submap/groundbase/poi/wildvillage/wide/wide5) "j" = ( /obj/structure/bed/chair/office/light{ @@ -138,7 +138,7 @@ /turf/simulated/floor/bmarble, /area/submap/groundbase/poi/wildvillage/wide/wide5) "u" = ( -/turf/simulated/floor/carpet/deco, +/turf/simulated/floor/carpet/geo, /area/submap/groundbase/poi/wildvillage/wide/wide5) "v" = ( /turf/simulated/floor/bmarble, @@ -150,7 +150,7 @@ /obj/structure/curtain/open/bed{ color = "#5e0c1d" }, -/turf/simulated/floor/carpet/deco, +/turf/simulated/floor/carpet/geo, /area/submap/groundbase/poi/wildvillage/wide/wide5) "y" = ( /obj/machinery/light/small{ @@ -170,14 +170,14 @@ /obj/structure/table/standard, /obj/random/maintenance/misc, /obj/random/maintenance/misc, -/turf/simulated/floor/carpet/deco, +/turf/simulated/floor/carpet/geo, /area/submap/groundbase/poi/wildvillage/wide/wide5) "B" = ( /turf/simulated/wall, /area/submap/groundbase/poi/wildvillage/wide/wide5) "C" = ( /obj/structure/undies_wardrobe, -/turf/simulated/floor/carpet/deco, +/turf/simulated/floor/carpet/geo, /area/submap/groundbase/poi/wildvillage/wide/wide5) "D" = ( /obj/structure/table/rack/shelf, @@ -284,7 +284,7 @@ /obj/structure/table/standard, /obj/random/maintenance/misc, /obj/random/maintenance/misc, -/turf/simulated/floor/carpet/deco, +/turf/simulated/floor/carpet/geo, /area/submap/groundbase/poi/wildvillage/wide/wide5) "V" = ( /obj/structure/bed/chair/sofa/corp/left, @@ -297,7 +297,7 @@ color = "#4287f5" }, /obj/machinery/light/small, -/turf/simulated/floor/carpet/deco, +/turf/simulated/floor/carpet/geo, /area/submap/groundbase/poi/wildvillage/wide/wide5) "X" = ( /obj/machinery/door/airlock/silver{ diff --git a/maps/groundbase/southwilds/villagepois/wide6.dmm b/maps/groundbase/southwilds/villagepois/wide6.dmm index 90f8197b9c..78b99a7beb 100644 --- a/maps/groundbase/southwilds/villagepois/wide6.dmm +++ b/maps/groundbase/southwilds/villagepois/wide6.dmm @@ -53,10 +53,7 @@ /obj/item/weapon/bedsheet/double, /obj/random/plushie, /obj/structure/curtain/open/privacy, -/obj/item/weapon/paper{ - info = "It is hard for me to write this out, and I hope you will be back soon, but I fear that by the time you return I will already be gone. I will try my best to hold on, but even as I write this, I can feel myself slipping.

    I know that you all do not believe me but I really can see them, just beyond the walls, and they're even closer now than they were before. I can see them even when I close my eyes. Seven golden eyes watch me, and I can feel their heat pouring into me. As they come closer, I can feel myself being tugged in. Like I'm a little lost moon being tugged into the embrace of a passing star.

    It still doesn't hurt. It's getting hard to see anything else, and I can't move anymore. I feel like everything is going to be okay. If you see seven eyes, don't be afraid. Just promise you'll come find me, okay?

    I'll keep hol
    "; - name = "A hand written letter" - }, +/obj/item/weapon/paper/wide6, /turf/simulated/floor/tiled/white, /area/submap/groundbase/poi/wildvillage/wide/wide6) "n" = ( diff --git a/maps/groundbase/westwilds/westwilds2.dmm b/maps/groundbase/westwilds/westwilds2.dmm index 3b14d14360..d16b67dd4f 100644 --- a/maps/groundbase/westwilds/westwilds2.dmm +++ b/maps/groundbase/westwilds/westwilds2.dmm @@ -13,6 +13,23 @@ /obj/item/weapon/tool/wrench, /turf/simulated/floor/tiled/white, /area/groundbase/science/outpost/toxins_mixing) +"ab" = ( +/obj/machinery/artifact_scanpad, +/turf/simulated/floor/tiled/dark, +/area/groundbase/science/outpost/anomaly_lab) +"ac" = ( +/obj/machinery/artifact_analyser, +/turf/simulated/floor/tiled/dark, +/area/groundbase/science/outpost/anomaly_lab) +"ad" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp, +/obj/machinery/vending/wallmed1{ + pixel_x = 30 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/dark, +/area/groundbase/science/outpost/anomaly_lab) "am" = ( /obj/machinery/atmospherics/pipe/simple/visible/blue{ dir = 9 @@ -438,11 +455,6 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/science/outpost/anomaly_lab) -"gg" = ( -/obj/machinery/artifact_scanpad, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/dark, -/area/groundbase/science/outpost/anomaly_lab) "gi" = ( /obj/structure/table/standard, /obj/machinery/computer/atmoscontrol/laptop{ @@ -958,11 +970,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/science/outpost/toxins_lab) -"lq" = ( -/obj/machinery/artifact_analyser, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/groundbase/science/outpost/anomaly_lab) "lw" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -2667,15 +2674,6 @@ /obj/machinery/atmospherics/portables_connector, /turf/simulated/floor, /area/groundbase/science/outpost/atmos) -"DN" = ( -/obj/structure/table/standard, -/obj/item/device/flashlight/lamp, -/obj/machinery/vending/wallmed1{ - pixel_x = 30 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, -/area/groundbase/science/outpost/anomaly_lab) "DP" = ( /obj/machinery/atmospherics/pipe/manifold/visible/supply, /obj/machinery/meter, @@ -18599,9 +18597,9 @@ MY qy Sh mh -gg -lq -DN +ab +ac +ad bp hm qg diff --git a/maps/offmap_vr/common_offmaps.dm b/maps/offmap_vr/common_offmaps.dm index b726a2fec3..1076f00dd3 100644 --- a/maps/offmap_vr/common_offmaps.dm +++ b/maps/offmap_vr/common_offmaps.dm @@ -220,6 +220,7 @@ mappath = 'maps/gateway_vr/wildwest.dmm' associated_map_datum = /datum/map_z_level/common_lateload/gateway_destination +#include "../gateway_vr/lucky_7.dm" ///////////////////////////////////////////////////////////////////////////////////// diff --git a/maps/om_adventure/pois/darkstar.dmm b/maps/om_adventure/pois/darkstar.dmm index a41ef6cb59..809c5b7aa7 100644 --- a/maps/om_adventure/pois/darkstar.dmm +++ b/maps/om_adventure/pois/darkstar.dmm @@ -2,11 +2,13 @@ "a" = ( /turf/template_noop, /area/template_noop) -"e" = ( +"b" = ( +/mob/living/simple_mob/vore/alienanimals/space_ghost{ + faction = "spookyland" + }, /turf/simulated/floor/weird_things/dark, /area/om_adventure/poi/darkstar) -"z" = ( -/mob/living/simple_mob/vore/alienanimals/space_ghost, +"e" = ( /turf/simulated/floor/weird_things/dark, /area/om_adventure/poi/darkstar) @@ -50,7 +52,7 @@ a e e e -z +b e e e diff --git a/maps/om_adventure/pois/fleshtear1.dmm b/maps/om_adventure/pois/fleshtear1.dmm index e2a3d25f18..bfe4b8089f 100644 --- a/maps/om_adventure/pois/fleshtear1.dmm +++ b/maps/om_adventure/pois/fleshtear1.dmm @@ -3,7 +3,9 @@ /turf/template_noop, /area/template_noop) "b" = ( -/mob/living/simple_mob/creature, +/mob/living/simple_mob/creature{ + faction = "spookyland" + }, /turf/simulated/floor/flesh{ base_icon = 'icons/turf/stomach_vr.dmi' }, diff --git a/maps/om_adventure/pois/fleshtear2.dmm b/maps/om_adventure/pois/fleshtear2.dmm index 19d435ce33..970059ac12 100644 --- a/maps/om_adventure/pois/fleshtear2.dmm +++ b/maps/om_adventure/pois/fleshtear2.dmm @@ -4,15 +4,17 @@ base_icon = 'icons/turf/stomach_vr.dmi' }, /area/om_adventure/poi/fleshtear2) +"b" = ( +/mob/living/simple_mob/creature{ + faction = "spookyland" + }, +/turf/simulated/floor/flesh{ + base_icon = 'icons/turf/stomach_vr.dmi' + }, +/area/om_adventure/poi/fleshtear2) "B" = ( /turf/template_noop, /area/template_noop) -"H" = ( -/mob/living/simple_mob/creature, -/turf/simulated/floor/flesh{ - base_icon = 'icons/turf/stomach_vr.dmi' - }, -/area/om_adventure/poi/fleshtear2) (1,1,1) = {" B @@ -45,7 +47,7 @@ B B B a -H +b a a B diff --git a/maps/om_adventure/pois/fleshtear3.dmm b/maps/om_adventure/pois/fleshtear3.dmm index 1c77a34996..c23cca7ebd 100644 --- a/maps/om_adventure/pois/fleshtear3.dmm +++ b/maps/om_adventure/pois/fleshtear3.dmm @@ -2,8 +2,10 @@ "a" = ( /turf/template_noop, /area/template_noop) -"M" = ( -/mob/living/simple_mob/creature, +"b" = ( +/mob/living/simple_mob/creature{ + faction = "spookyland" + }, /turf/simulated/floor/flesh{ base_icon = 'icons/turf/stomach_vr.dmi' }, @@ -62,7 +64,7 @@ Q Q a Q -M +b Q Q a diff --git a/maps/om_adventure/pois/fleshtear4.dmm b/maps/om_adventure/pois/fleshtear4.dmm index 077d29a8b7..b41923a34c 100644 --- a/maps/om_adventure/pois/fleshtear4.dmm +++ b/maps/om_adventure/pois/fleshtear4.dmm @@ -2,13 +2,15 @@ "a" = ( /turf/template_noop, /area/template_noop) -"m" = ( +"b" = ( +/mob/living/simple_mob/creature{ + faction = "spookyland" + }, /turf/simulated/floor/flesh{ base_icon = 'icons/turf/stomach_vr.dmi' }, /area/om_adventure/poi/fleshtear4) -"n" = ( -/mob/living/simple_mob/creature, +"m" = ( /turf/simulated/floor/flesh{ base_icon = 'icons/turf/stomach_vr.dmi' }, @@ -31,7 +33,7 @@ a (3,1,1) = {" a a -n +b m a "} @@ -65,7 +67,7 @@ a "} (8,1,1) = {" a -n +b m m a diff --git a/maps/southern_cross/loadout/loadout_accessories.dm b/maps/southern_cross/loadout/loadout_accessories.dm index f26ff23acd..12e14c64fd 100644 --- a/maps/southern_cross/loadout/loadout_accessories.dm +++ b/maps/southern_cross/loadout/loadout_accessories.dm @@ -16,17 +16,17 @@ /datum/gear/accessory/brown_drop_pouches display_name = "drop pouches, brown" path = /obj/item/clothing/accessory/storage/brown_drop_pouches - allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Pathfinder","Search and Rescue","Explorer","Shaft Miner") //CHOMPEDIT + allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Pathfinder","Search and Rescue","Explorer","Shaft Miner","Field Medic") //CHOMPEDIT /datum/gear/accessory/black_drop_pouches display_name = "drop pouches, black" path = /obj/item/clothing/accessory/storage/black_drop_pouches - allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Pathfinder","Search and Rescue","Explorer","Shaft Miner") //CHOMPEDIT + allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Pathfinder","Search and Rescue","Explorer","Shaft Miner","Field Medic") //CHOMPEDIT /datum/gear/accessory/white_drop_pouches display_name = "drop pouches, white" path = /obj/item/clothing/accessory/storage/white_drop_pouches - allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Pathfinder","Search and Rescue","Explorer","Shaft Miner") //CHOMPEDIT + allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Pathfinder","Search and Rescue","Explorer","Shaft Miner","Field Medic") //CHOMPEDIT /datum/gear/accessory/holster display_name = "holster selection (Security, CD, HoP)" diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm index a0a43254d7..1d97b6e454 100644 --- a/maps/southern_cross/southern_cross-1.dmm +++ b/maps/southern_cross/southern_cross-1.dmm @@ -1628,13 +1628,32 @@ /area/medical/first_aid_station/firstdeck) "agb" = ( /obj/structure/table/standard, -/obj/item/weapon/stock_parts/subspace/crystal, -/obj/item/weapon/stock_parts/subspace/crystal, -/obj/item/weapon/stock_parts/subspace/crystal, +/obj/item/weapon/stock_parts/subspace/crystal{ + pixel_x = -7; + pixel_y = -4 + }, +/obj/item/weapon/stock_parts/subspace/crystal{ + pixel_y = -4 + }, +/obj/item/weapon/stock_parts/subspace/crystal{ + pixel_x = 7; + pixel_y = -4 + }, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 }, +/obj/item/weapon/ore/bluespace_crystal/artificial{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/weapon/ore/bluespace_crystal/artificial{ + pixel_y = 7 + }, +/obj/item/weapon/ore/bluespace_crystal/artificial{ + pixel_x = -7; + pixel_y = 7 + }, /turf/simulated/floor, /area/tcomm/tcomstorage) "agc" = ( @@ -2781,6 +2800,11 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/port) +"alx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/industrial/warning/full, +/turf/simulated/floor/plating, +/area/maintenance/substation/firstdeck) "alz" = ( /obj/machinery/door/firedoor/border_only, /obj/structure/cable{ @@ -3430,7 +3454,6 @@ /turf/simulated/floor/tiled/dark, /area/hallway/primary/firstdeck/port) "apD" = ( -/obj/item/weapon/storage/toolbox/mechanical, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/tcomm/tcomstorage) @@ -7171,6 +7194,10 @@ /turf/space, /turf/simulated/floor/plating, /area/hangar/two) +"aKG" = ( +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/hangar/two) "aKH" = ( /obj/structure/sign/directions/engineering{ dir = 1; @@ -9720,6 +9747,9 @@ /obj/item/stack/material/silver{ amount = 6 }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/security/nuke_storage) "bfF" = ( @@ -9749,6 +9779,9 @@ desc = "A large cabinet with hard copy medical records."; name = "Medical Records" }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/security/nuke_storage) "bhj" = ( @@ -10352,9 +10385,6 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/light{ - dir = 8 - }, /turf/simulated/floor/tiled/dark, /area/security/nuke_storage) "bLW" = ( @@ -12519,7 +12549,7 @@ }, /obj/machinery/power/smes/buildable{ RCon_tag = "Auxiliary - Main"; - charge = 1e+007; + charge = 2.4e+007; cur_coils = 4; input_level = 500000; output_level = 500000 @@ -15750,6 +15780,9 @@ /obj/item/weapon/module/power_control, /obj/item/weapon/airlock_electronics, /obj/structure/table/steel, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/storage/tech) "fUB" = ( @@ -21307,6 +21340,9 @@ /obj/item/device/aicard, /obj/item/weapon/aiModule/reset, /obj/structure/table/steel, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/storage/tech) "nlX" = ( @@ -21410,6 +21446,18 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/firstdeck/elevator) +"nwe" = ( +/obj/effect/floor_decal/borderfloorblack{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/machinery/light/floortube{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/storage) "nwj" = ( /obj/item/stack/tile/wood, /obj/machinery/alarm{ @@ -21698,6 +21746,9 @@ /obj/effect/floor_decal/corner/brown/border{ dir = 8 }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/quartermaster/storage) "nZo" = ( @@ -22434,9 +22485,7 @@ /obj/structure/sign/warning/nosmoking_2{ pixel_y = -32 }, -/obj/machinery/telecomms/hub/preset/southerncross{ - autolinkers = list("hub","d1_relay","d2_relay","d3_relay","pnt_relay","cve_relay","wld_relay","tns_relay","explorer","exp_relay","c_relay","m_relay","r_relay","science","medical","supply","service","common","command","engineering","security","unused","hb_relay","receiverA","broadcasterA","casino_relay") - }, +/obj/machinery/telecomms/hub/preset/southerncross, /turf/simulated/floor/tiled/dark{ nitrogen = 100; oxygen = 0; @@ -22650,6 +22699,14 @@ }, /turf/simulated/floor/tiled, /area/tcomm/computer) +"pmB" = ( +/obj/machinery/deployable/barrier, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/security/checkpoint3) "pmG" = ( /obj/structure/cable/green{ d1 = 1; @@ -24495,6 +24552,11 @@ /obj/machinery/camera/network/telecom{ c_tag = "TCOMMS - Storage" }, +/obj/item/weapon/circuitboard/telecomms/relay, +/obj/item/weapon/circuitboard/telecomms/relay, +/obj/item/weapon/circuitboard/teleporter, +/obj/item/weapon/circuitboard/teleporter_hub, +/obj/item/weapon/circuitboard/teleporter_station, /turf/simulated/floor, /area/tcomm/tcomstorage) "rzN" = ( @@ -25146,6 +25208,9 @@ /obj/effect/floor_decal/corner/brown/border{ dir = 8 }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/quartermaster/storage) "syH" = ( @@ -25714,6 +25779,12 @@ }, /turf/simulated/floor/tiled/white, /area/medical/first_aid_station/firstdeck) +"tgg" = ( +/obj/structure/lattice, +/obj/item/stack/rods, +/obj/structure/grille/broken, +/turf/space, +/area/space) "tgD" = ( /obj/machinery/light{ dir = 1 @@ -28115,6 +28186,8 @@ /turf/simulated/shuttle/plating/airless/carry, /area/shuttle/large_escape_pod1/station) "vMc" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/toolbox/mechanical, /turf/simulated/floor, /area/tcomm/tcomstorage) "vMv" = ( @@ -28687,6 +28760,10 @@ /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/steel_dirty, /area/engineering/auxiliary_engineering) +"wtg" = ( +/obj/effect/floor_decal/industrial/warning/full, +/turf/space, +/area/space) "wth" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -48969,7 +49046,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -48989,8 +49066,8 @@ kwt aaf aaa aaa -aaa -aaa +aVS +xrX aaa aaa aaa @@ -49227,7 +49304,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -49248,9 +49325,9 @@ kwt aaa aaa aaa -aaa -aaa -aaa +aaf +aaf +aaf aaa aaa xrX @@ -49485,7 +49562,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -49508,7 +49585,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -51803,10 +51880,10 @@ aaf aaf vYi vYi -aaa -aaa -aaa -aaa +aaf +aaf +aaf +aaf kwt abg aaC @@ -52061,8 +52138,8 @@ aaa aaa aaf aaa -aaa -aaa +aaf +sFQ aaa aaa kwt @@ -52865,7 +52942,7 @@ aEN awI tcO nTw -aEN +nwe awI ati nTw @@ -58775,8 +58852,8 @@ aFf aFf aFf aFf -aaa -aaa +wtg +wtg aaa aFf aFf @@ -59032,7 +59109,7 @@ cZt aaa aaa aaa -aaa +wtg aaa aaa aaa @@ -59779,8 +59856,8 @@ aaa aaa aaa aaa -aaa -aaa +aVS +aaf tOo tOo tOo @@ -61103,7 +61180,7 @@ iLt jYP lGZ mSD -oGT +alx oGT rvk aRt @@ -64748,7 +64825,7 @@ dXx dYW ftR gYy -kLb +pmB qJp aNX aTA @@ -64939,8 +65016,8 @@ aaa aaa aaa aaa -aaa -aaa +aaf +aaf aap aap abz @@ -65971,9 +66048,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +aaf +aaf +aaf acH aap aap @@ -67003,8 +67080,8 @@ aaa aaa aaa aaa -aaa -aaa +aaf +aaf abT abT abT @@ -71450,7 +71527,7 @@ jUC xhd xhd jUC -jUC +aKG dWL aaf aaf @@ -77373,7 +77450,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -77625,13 +77702,13 @@ xSg qSb moQ moQ +aaf aaa aaa aaa aaa aaa -aaa -aaa +aaf aaa aaa aaa @@ -77883,13 +77960,13 @@ moQ moQ moQ aaf +aaf aaa aaa aaa aaa aaa -aaa -aaa +aaf aaa aaa aaa @@ -78147,7 +78224,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -78405,7 +78482,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -78663,7 +78740,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -78921,7 +78998,7 @@ aaa aaa aaa aaa -aaa +vYi aaa aaa aaa @@ -79179,7 +79256,7 @@ aaa aaa aaa aaa -aaa +vYi aaa aaa aaa @@ -79435,9 +79512,9 @@ itV itV itV itV -aaa -aaa -aaa +aaf +aaf +xrX aaa ean aaa @@ -79695,7 +79772,7 @@ xdz itV aaa aaa -aaa +vYi aaa aaa aaa @@ -79953,7 +80030,7 @@ jPJ itV aaa aaa -aaa +vYi aaa aaa aaa @@ -80211,7 +80288,7 @@ jPJ itV aaa aaa -aaa +vYi aaa aaa aaa @@ -80467,9 +80544,9 @@ okX okX okX itV -aaa -aaa -aaa +aaf +aaf +vYi aaa aaa aaa @@ -80727,7 +80804,7 @@ jPJ itV aaa aaa -aaa +vYi aaa aaa aaa @@ -80985,7 +81062,7 @@ jPJ itV aaa aaa -aaa +aVS aaa aaa aaa @@ -81243,7 +81320,7 @@ ust itV aaa aaa -aaa +xrX aaa aaa aaa @@ -81499,8 +81576,8 @@ itV itV itV itV -aaa -aaa +aaf +aaf aaa aaa aaa @@ -82016,8 +82093,8 @@ lse jVV aaa aaa -vYi aaa +vYi aaa aaa aaa @@ -82274,8 +82351,8 @@ lsJ aaa aaa aaa -vYi aaa +vYi aaa ean aaa @@ -82532,6 +82609,7 @@ itV aaf aaf aaf +aaf vYi aaa aaa @@ -82658,7 +82736,6 @@ aaa aaa aaa aaa -aaa "} (205,1,1) = {" aaa @@ -82772,7 +82849,7 @@ vYi aaa aaa aaa -aaa +aaf itV oxn itV @@ -82790,8 +82867,8 @@ aaa aaa aaa aaa -vYi aaa +vYi aaa aaa aaa @@ -83030,7 +83107,7 @@ vYi vYi aaa aaa -aaa +aaf aaa oxq itV @@ -83043,6 +83120,7 @@ jPJ pXB itV aaa +aaf aaa aaa aaa @@ -83174,7 +83252,6 @@ aaa aaa aaa aaa -aaa "} (207,1,1) = {" aaa @@ -83288,7 +83365,7 @@ aaa vYi aaa aaa -aaa +aaf aaa oxL itV @@ -83301,6 +83378,7 @@ jSg sLG itV aaa +aaf aaa aaa aaa @@ -83432,7 +83510,6 @@ aaa aaa aaa aaa -aaa "} (208,1,1) = {" aaa @@ -83546,7 +83623,7 @@ aaa aaa aaa aaa -aaa +aaf aaa oxL itV @@ -83559,7 +83636,7 @@ wZU opg itV aaa -aaa +aaf aaa aaa aaa @@ -83804,7 +83881,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -83816,8 +83893,8 @@ aaa aaa aaa aaa -aaa -aaa +fdW +aaf aaa aaa aaa @@ -84062,7 +84139,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -84075,7 +84152,7 @@ aaa aaa aaa aaa -aaa +sFQ aaa aaa aaa @@ -84320,7 +84397,7 @@ aaa aaa aaa aaa -aaa +xrX aaa aaa aaa @@ -84333,7 +84410,7 @@ aaa aaa aaa aaa -aaa +vYi aaa aaa aaa @@ -84578,8 +84655,8 @@ aaa aaa aaa aaa -aaa -aaa +vYi +vYi aaa aaa vYi @@ -84837,8 +84914,8 @@ aaa aaa aaa aaa -aaa -aaa +vYi +vYi aaa uXr eaV @@ -85096,7 +85173,7 @@ aaa aaa aaa aaa -aaa +tgg aaa uXr uXr diff --git a/maps/southern_cross/southern_cross-10.dmm b/maps/southern_cross/southern_cross-10.dmm index 18d60a035f..741ed1a534 100644 --- a/maps/southern_cross/southern_cross-10.dmm +++ b/maps/southern_cross/southern_cross-10.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ad" = ( +/obj/machinery/light, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) "aj" = ( /obj/effect/zone_divider, /turf/simulated/wall/solidrock, @@ -7,14 +11,31 @@ /obj/effect/zone_divider, /turf/simulated/mineral/sif, /area/surface/outside/wilderness/mountains) +"bc" = ( +/obj/machinery/light, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/bed/roller, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) "bw" = ( -/obj/structure/railing, +/obj/structure/railing/grey, /turf/simulated/floor/outdoors/grass/sif/planetuse, -/area/surface/outside/wilderness/normal) +/area/surface/outpost/shelter/exterior) "cs" = ( /obj/effect/zone_divider, /turf/simulated/floor/outdoors/grass/sif/planetuse, /area/surface/outside/wilderness/deep) +"dh" = ( +/obj/machinery/button/remote/blast_door{ + dir = 1; + id = "wilderness_shelter_1st_floor"; + name = "Wilderness Shelter Shutters"; + pixel_y = -26; + req_one_access = list(1,5,10,12,13,18,31,43,47,48,50) + }, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) "dl" = ( /obj/effect/zone_divider, /obj/effect/zone_divider, @@ -36,8 +57,50 @@ pixel_y = -26; tag_door = "mining_dock_3_door" }, -/turf/simulated/floor/plating/external, +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/turf/simulated/floor/wood/sif, /area/surface/outpost/shelter) +"eI" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) +"eP" = ( +/obj/structure/closet/secure_closet/medical_wall{ + name = "Wilderness Shelter defibrillator closet"; + pixel_y = 31; + req_access = null; + req_one_access = list(1,3,43,66,67); + starts_with = list(/obj/item/device/defib_kit/loaded) + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) +"fW" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) "gm" = ( /obj/effect/zone_divider, /obj/effect/zone_divider, @@ -50,6 +113,10 @@ /obj/effect/zone_divider, /turf/simulated/floor/outdoors/dirt/sif/planetuse, /area/surface/outside/wilderness/deep) +"hM" = ( +/obj/random/junk, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "hW" = ( /turf/simulated/floor/outdoors/dirt, /area/surface/outside/path/wilderness) @@ -59,6 +126,14 @@ "iJ" = ( /turf/simulated/floor/outdoors/grass/sif/planetuse, /area/surface/outside/path/wilderness) +"jb" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/log_sif, +/area/surface/outpost/shelter) "ji" = ( /turf/simulated/wall/wood, /area/surface/outside/path/wilderness) @@ -68,6 +143,25 @@ "kj" = ( /turf/simulated/wall/solidrock, /area/surface/outpost/wall/checkpoint) +"kA" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/frame{ + anchored = 1 + }, +/obj/machinery/camera/network/substations{ + c_tag = "WILD - Shelter Utility Room"; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) "lY" = ( /turf/simulated/floor/wood{ outdoors = 1; @@ -80,23 +174,126 @@ }, /turf/simulated/floor/water, /area/surface/outside/river/svartan) -"mU" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/turf/simulated/floor/plating/external, +"mD" = ( +/obj/machinery/button/remote/blast_door{ + id = "wilderness_shelter_1st_floor"; + name = "Wilderness Shelter Shutters"; + pixel_y = 26 + }, +/turf/simulated/floor/wood/sif, /area/surface/outpost/shelter) +"nu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) "nv" = ( /obj/structure/railing{ dir = 8 }, /turf/simulated/floor/water, /area/surface/outside/river/svartan) +"nK" = ( +/obj/machinery/light, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/surface/outpost/shelter/exterior) +"nW" = ( +/obj/machinery/power/thermoregulator/southerncross{ + pixel_x = 1; + pixel_y = 26 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/table/sifwooden_reinforced, +/obj/item/stack/material/log/sif{ + amount = 25; + icon_state = "sheet-log_3"; + pixel_x = -5; + pixel_y = 2 + }, +/obj/item/stack/material/log/sif{ + amount = 25; + icon_state = "sheet-log_3"; + pixel_x = 5; + pixel_y = 2 + }, +/obj/item/stack/tile/wood/sif{ + amount = 60; + icon_state = "tile-sifwood_3" + }, +/obj/item/stack/material/wood/sif{ + amount = 50; + icon_state = "sheet-wood_3"; + pixel_y = 2 + }, +/obj/item/weapon/chainsaw{ + layer = 3.01 + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) +"nY" = ( +/obj/structure/sign/department/medbay{ + name = "FIRST AID" + }, +/turf/simulated/wall/log_sif, +/area/surface/outpost/shelter) +"om" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/closet/walllocker_double/survival/north{ + name = "Wilderness Shelter Emergency Food Wall Cabinet"; + starts_with = list(/obj/random/mre = 20,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 20) + }, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) "oO" = ( /turf/simulated/floor/outdoors/dirt/sif/planetuse, /area/surface/outside/wilderness/normal) "pj" = ( /turf/simulated/floor/water/deep, /area/surface/outside/wilderness/deep) +"pk" = ( +/obj/structure/closet/medical_wall{ + name = "Wilderness Shelter first-aid closet"; + pixel_y = 31; + starts_with = list(/obj/item/roller,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/firstaid/regular = 2,obj/item/weapon/storage/pill_bottle/spaceacillin) + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) +"pl" = ( +/obj/structure/simple_door/sifwood, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "wilderness_shelter_Utility"; + layer = 3; + name = "Wilderness Shelter Shutters" + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) "pB" = ( /obj/effect/map_effect/portal/master/side_b/wilderness_to_caves/river{ dir = 1 @@ -116,14 +313,61 @@ }, /turf/simulated/floor/water/deep, /area/surface/outside/river/svartan) +"qb" = ( +/obj/machinery/camera/network/exploration{ + c_tag = "WILD - Shelter First Floor Exterior"; + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) +"qk" = ( +/obj/machinery/camera/network/medbay{ + c_tag = "WILD - Shelter First Aid"; + dir = 8 + }, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/obj/structure/table/rack, +/obj/item/weapon/tool/crowbar, +/obj/item/weapon/tool/crowbar, +/obj/item/roller, +/obj/item/roller, +/obj/item/weapon/storage/box/bodybags{ + pixel_x = 8; + pixel_y = -5 + }, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) "ro" = ( /obj/effect/zone_divider, /turf/simulated/floor/outdoors/grass/sif/forest/planetuse, /area/surface/outside/wilderness/deep) +"rz" = ( +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "wilderness_shelter_Utility"; + name = "Wilderness Shelter Shutters"; + pixel_x = 24; + req_one_access = list(1,5,10,12,13,18,31,43,47,48,50) + }, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) "rN" = ( /obj/structure/stairs/spawner/west, /turf/simulated/floor/outdoors/dirt/sif/planetuse, /area/surface/outside/path/wilderness) +"rR" = ( +/obj/structure/curtain/medical{ + name = "medical curtain" + }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) "rW" = ( /obj/effect/map_effect/portal/master/side_b/wilderness_to_caves{ dir = 1 @@ -137,6 +381,41 @@ /obj/effect/map_effect/perma_light/concentrated/incandescent, /turf/simulated/floor/water, /area/surface/outpost/wall/checkpoint) +"tb" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) +"tq" = ( +/turf/simulated/wall/rsifwood, +/area/surface/outpost/shelter/exterior) +"tA" = ( +/obj/structure/ladder/up, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) +"uh" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "wilderness_shelter_1st_floor"; + layer = 4; + name = "Wilderness Shelter Shutters" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) +"uO" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) "uU" = ( /obj/item/weapon/banner/nt, /turf/simulated/shuttle/floor/voidcraft/external, @@ -171,9 +450,9 @@ "xG" = ( /turf/simulated/floor/outdoors/grass/sif/planetuse, /area/surface/outside/wilderness/deep) -"xO" = ( -/turf/simulated/floor/plating/external, -/area/surface/outpost/shelter) +"xZ" = ( +/turf/simulated/wall/rsifwood, +/area/surface/outside/wilderness/mountains) "yb" = ( /turf/simulated/floor/outdoors/grass/sif/planetuse{ tree_chance = 0 @@ -204,10 +483,30 @@ /area/surface/outside/path/wilderness) "ze" = ( /obj/structure/simple_door/sifwood, -/turf/simulated/floor/plating/external, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "wilderness_shelter_1st_floor"; + layer = 4; + name = "Wilderness Shelter Shutters" + }, +/turf/simulated/floor/wood/sif, /area/surface/outpost/shelter) +"zf" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/frame{ + anchored = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) "zi" = ( -/obj/random/junk, /obj/machinery/embedded_controller/radio/simple_docking_controller{ frequency = 1380; id_tag = "mining_dock_1"; @@ -215,8 +514,31 @@ pixel_y = -26; tag_door = "mining_dock_1_door" }, -/turf/simulated/floor/plating/external, +/obj/machinery/alarm/sifwilderness{ + dir = 4; + pixel_x = -22 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/table/sifwooden_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/floor/wood/sif, /area/surface/outpost/shelter) +"Ai" = ( +/obj/item/device/geiger/wall/north, +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) +"Am" = ( +/turf/simulated/wall/log_sif, +/area/surface/outpost/shelter/utilityroom) "Az" = ( /turf/simulated/floor/outdoors/grass/sif/planetuse{ tree_chance = 0 @@ -255,12 +577,16 @@ temperature = 243.15 }, /area/surface/outside/path/wilderness) -"Dg" = ( -/obj/structure/bed/chair{ - dir = 8 +"CR" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" }, -/turf/simulated/floor/plating/external, -/area/surface/outpost/shelter) +/obj/structure/frame{ + anchored = 1 + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) "Dy" = ( /obj/effect/zone_divider, /turf/simulated/floor/outdoors/grass/sif/forest/planetuse, @@ -272,19 +598,66 @@ /obj/effect/zone_divider, /turf/simulated/floor/water, /area/surface/outside/river/svartan) +"Ez" = ( +/obj/structure/cable{ + d1 = 16; + d2 = 0; + icon_state = "16-0" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/button/remote/blast_door{ + id = "wilderness_shelter_Utility"; + name = "Wilderness Shelter Shutters"; + pixel_y = 26 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) +"EC" = ( +/obj/machinery/camera/network/substations{ + c_tag = "WILD - Shelter Utility Exterior"; + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) "Fj" = ( -/obj/structure/table/steel, +/obj/structure/table/sifwooden_reinforced, /obj/machinery/power/apc{ dir = 8; - locked = 0; name = "west bump"; - operating = 0; pixel_x = -24 }, -/obj/structure/cable, -/obj/item/stack/material/phoron, -/turf/simulated/floor/plating/external, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/device/radio/subspace{ + desc = "A heavy duty radio that can pick up all manor of shortwave and subspace frequencies. It's a bit bulkier than a normal radio thanks to the extra hardware. An engraving on the frame reads: IF FOUND, RETURN TO WILDERNESS SHELTER!"; + name = "Wilderness Shelter subspace radio" + }, +/turf/simulated/floor/wood/sif, /area/surface/outpost/shelter) +"GE" = ( +/obj/machinery/light/bigfloorlamp, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/surface/outpost/shelter/exterior) "GK" = ( /obj/effect/zone_divider, /obj/effect/zone_divider, @@ -293,6 +666,12 @@ "GL" = ( /turf/simulated/shuttle/wall/voidcraft/hard_corner, /area/surface/outpost/wall/checkpoint) +"GZ" = ( +/obj/structure/bed/chair/bay/comfy/blue{ + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "Hf" = ( /obj/structure/showcase/sign{ desc = "This appears to be a sign warning people that the other side is extremely hazardous."; @@ -308,27 +687,55 @@ "Hx" = ( /turf/simulated/mineral/sif, /area/surface/outside/wilderness/deep) +"HM" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/machinery/vending/wallmed1{ + name = "Emergency NanoMed"; + pixel_y = 28 + }, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) "IJ" = ( /turf/simulated/floor/outdoors/rocks/sif/planetuse, /area/surface/outside/wilderness/deep) +"IK" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) +"IS" = ( +/obj/machinery/camera/network/exploration{ + c_tag = "WILD - Shelter First Floor"; + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "IZ" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/power/thermoregulator/southerncross{ + dir = 4; + pixel_x = -26; + pixel_y = 2 + }, /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/port_gen/pacman, -/turf/simulated/floor/plating/external, +/obj/structure/closet/crate/bin, +/turf/simulated/floor/wood/sif, /area/surface/outpost/shelter) +"Jh" = ( +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) "Js" = ( /turf/simulated/floor/water, /area/surface/outside/wilderness/deep) -"Jy" = ( -/obj/machinery/recharger/wallcharger{ - pixel_x = 4; - pixel_y = 26 - }, -/turf/simulated/floor/plating/external, -/area/surface/outpost/shelter) "JH" = ( /turf/simulated/floor/water, /area/surface/outside/ocean) @@ -339,9 +746,7 @@ /turf/simulated/floor/outdoors/dirt, /area/surface/outside/wilderness/normal) "KG" = ( -/obj/structure/closet, -/obj/random/maintenance/clean, -/turf/simulated/floor/plating/external, +/turf/simulated/floor/wood/sif, /area/surface/outpost/shelter) "Mm" = ( /turf/unsimulated/wall/planetary/sif, @@ -381,6 +786,14 @@ "Rm" = ( /turf/simulated/floor/water, /area/surface/outpost/wall/checkpoint) +"RJ" = ( +/obj/structure/curtain/medical{ + name = "medical curtain" + }, +/obj/effect/floor_decal/borderfloorwhite, +/obj/effect/floor_decal/corner/paleblue/border, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/shelter) "Si" = ( /turf/simulated/floor/outdoors/grass/sif/planetuse, /area/surface/outside/wilderness/normal) @@ -396,17 +809,27 @@ /obj/effect/zone_divider, /turf/simulated/floor/outdoors/grass/sif/planetuse, /area/surface/outside/wilderness/normal) +"Tn" = ( +/obj/machinery/light/small, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) "Tr" = ( -/obj/machinery/space_heater, -/obj/machinery/embedded_controller/radio/simple_docking_controller{ - frequency = 1380; - id_tag = "mining_dock_2"; - name = "shuttle bay controller"; - pixel_y = -26; - tag_door = "mining_dock_2_door" - }, -/turf/simulated/floor/plating/external, -/area/surface/outpost/shelter) +/obj/structure/table/rack, +/obj/item/weapon/circuitboard/machine/rtg/advanced, +/obj/item/weapon/circuitboard/machine/rtg/advanced, +/obj/item/weapon/circuitboard/machine/rtg/advanced, +/obj/item/stack/cable_coil, +/obj/item/weapon/storage/belt/utility/full, +/obj/random/powercell, +/obj/random/powercell, +/obj/random/powercell, +/obj/fiftyspawner/rods, +/obj/fiftyspawner/rods, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) +"Tw" = ( +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) "Tx" = ( /turf/simulated/floor/water, /area/surface/outside/river/svartan) @@ -423,11 +846,23 @@ /turf/simulated/floor/outdoors/grass/sif/planetuse, /area/surface/outside/wilderness/normal) "UR" = ( -/obj/structure/closet/crate, -/obj/random/powercell, -/obj/item/weapon/tool/screwdriver, -/turf/simulated/floor/plating/external, -/area/surface/outpost/shelter) +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/item/stack/material/phoron{ + amount = 2 + }, +/turf/simulated/floor/plating, +/area/surface/outpost/shelter/utilityroom) "Vt" = ( /obj/item/weapon/banner/virgov, /turf/simulated/shuttle/floor/voidcraft/external, @@ -437,8 +872,9 @@ /turf/simulated/floor/water/deep, /area/surface/outside/ocean) "VE" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plating/external, +/obj/structure/table/sifwooden_reinforced, +/obj/machinery/photocopier/faxmachine, +/turf/simulated/floor/wood/sif, /area/surface/outpost/shelter) "VH" = ( /obj/effect/shuttle_landmark{ @@ -460,6 +896,11 @@ /obj/effect/zone_divider, /turf/unsimulated/wall/planetary/sif, /area/surface/outside/ocean) +"XH" = ( +/obj/structure/ladder/up, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "Yg" = ( /obj/structure/railing, /turf/simulated/floor/water, @@ -474,10 +915,28 @@ }, /turf/simulated/floor/water, /area/surface/outside/ocean) +"Zr" = ( +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/surface/outpost/shelter/exterior) "Zw" = ( -/obj/structure/table/steel, +/obj/structure/table/sifwooden_reinforced, /obj/machinery/cell_charger, -/turf/simulated/floor/plating/external, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/recharger/wallcharger{ + pixel_x = -24; + pixel_y = -4 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) +"ZZ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, /area/surface/outpost/shelter) (1,1,1) = {" @@ -19563,7 +20022,7 @@ Sr Sr Si Si -Si +oO Si Si Si @@ -20080,8 +20539,8 @@ Si Si Si Si -Si -Si +oO +oO Si Si Oa @@ -20333,16 +20792,16 @@ Sr Sr Sr Sr -Sr -Si -Si -Si -Si -Si -Si -Si -Si -Oa +Tw +Zr +Zr +Zr +Zr +Zr +Zr +Zr +Tw +tA Oa yC "} @@ -20591,16 +21050,16 @@ yb yb Si Sr -Sr -Si -Si -Si -Si -Si -Si -Si -Si -Oa +ad +tq +Zr +Zr +Zr +tq +Zr +Tw +Tn +tq Oa yC "} @@ -20849,16 +21308,16 @@ yb yb Sr Sr -Sr -Si -Si -Si -Si -Si -Si -Si -Si -Oa +Tw +Zr +Zr +Zr +Zr +Zr +Zr +Tw +Tw +Zr Oa yC "} @@ -21107,16 +21566,16 @@ Sr Sr Sr Sr -Sr -Si -Si -Si -Si -Si -Si -Si -Si -Oa +Tw +Zr +Zr +Tw +Zr +Zr +Tw +Zr +Tw +Tw Oa yC "} @@ -21365,16 +21824,16 @@ Sr yb yb Sr -Sr -Si -Si -Si -Si -Si -Si -Si -Si -Oa +Tw +Zr +Zr +Zr +Tw +Tw +Zr +Zr +Tw +Zr Oa yC "} @@ -21623,16 +22082,16 @@ Sr yb yb Sr -Sr -Si -Si -Si -Si -Si -Si -Si -Si -Oa +ad +tq +Zr +Tw +Tw +tq +Zr +Tw +Tw +tq Oa yC "} @@ -21881,16 +22340,16 @@ yb yb yb Sr -Sr -Si -Si -Si -Si -Si -Si -Si -Oa -Oa +Tw +Zr +Tw +Zr +Zr +EC +Zr +Zr +Tw +Zr Oa yC "} @@ -22139,16 +22598,16 @@ yb yb yb Sr -Sr -Si -Si -Si -Si -Si -Si -Si -Oa -Oa +Tw +Tw +Tw +Tw +Tw +Tw +Tw +Tw +Tw +Zr Oa yC "} @@ -22397,16 +22856,16 @@ yb yb yb Sr -Sr -Si -Si -Si -Si -Si -Si -Si -Oa -Oa +Tw +Tw +Tw +Tw +Tw +Tw +tb +Tw +rz +Zr Oa yC "} @@ -22655,17 +23114,17 @@ yb yb yb Sr -Sr +ad AQ AQ AQ AQ AQ AQ -Si -Oa -Oa -Oa +pl +Am +Am +Am yC "} (87,1,1) = {" @@ -22913,17 +23372,17 @@ yb yb yb yb -Sr -mU +Tw +uh IZ Fj Zw zi -AQ -Oa -Oa -Oa -Oa +jb +Ez +nu +UR +Am yC "} (88,1,1) = {" @@ -23171,17 +23630,17 @@ yb yb yb Sr -Sr +dh AQ -Jy -Dg -xO +mD +hM +GZ VE AQ -Oa -Oa -Oa -Oa +nW +Jh +fW +Am yC "} (89,1,1) = {" @@ -23429,17 +23888,17 @@ yb yb yb yb -Sr +Tw ze -xO -xO -xO +KG +KG +KG dE AQ -Oa -Oa -Oa -Oa +Ai +Jh +kA +Am yC "} (90,1,1) = {" @@ -23687,17 +24146,17 @@ yb yb yb Sr -Sr +qb AQ -xO -xO -xO -xO +KG +KG +KG +XH AQ -Oa -Oa -Oa -Oa +IK +Jh +zf +Am yC "} (91,1,1) = {" @@ -23945,17 +24404,17 @@ yb yb yb Sr -Sr -mU -xO +Tw +uh +ZZ +IS +KG KG -UR -Tr AQ -Oa -Oa -Oa -Oa +Tr +Jh +CR +Am yC "} (92,1,1) = {" @@ -24203,17 +24662,17 @@ oO yb yb Sr -Sr +ad AQ AQ +nY +rR +RJ AQ -AQ -AQ -AQ -Oa -Oa -Oa -Oa +Am +Am +Am +Am yC "} (93,1,1) = {" @@ -24461,13 +24920,13 @@ yb yb yb Sr -Sr -Si -Si -Si -Si -Si -Si +Tw +Zr +Zr +AQ +HM +bc +AQ Oa Oa Oa @@ -24719,13 +25178,13 @@ Sr yb yb Sr -Sr -Sr -Si -Si -Si -Si -Si +Tw +Tw +Zr +AQ +eP +uO +AQ Oa Oa Oa @@ -24977,13 +25436,13 @@ yb Sr Sr Sr -Sr -Sr -Si -Si -Si -Si -Si +Tw +Tw +Zr +AQ +pk +eI +AQ Oa Oa Oa @@ -25235,13 +25694,13 @@ yb Sr Sr Sr -Sr -Sr -Si -Si -Si -Si -Oa +Tw +Tw +Zr +AQ +om +qk +AQ Oa Oa Oa @@ -25493,13 +25952,13 @@ yb yb Sr Sr -Sr -Si -Si -Si -Si -Si -Oa +Tw +Tw +GE +AQ +AQ +AQ +AQ Oa Oa Oa @@ -25751,13 +26210,13 @@ oO yb yb yb -Sr -Sr -Si -Si -Si -Si -Oa +Tw +Tw +Zr +Zr +Zr +Zr +Zr Oa Oa Oa @@ -26011,11 +26470,11 @@ yb yb Sr Sr -Si -Si -Si -Si -Si +Zr +Zr +Zr +Zr +Zr Oa Oa Oa @@ -26270,10 +26729,10 @@ yb Sr Sr Sr -Si -Si -Si -Si +Zr +Zr +Zr +Zr Oa Oa Oa @@ -26528,10 +26987,10 @@ yb Si Sr Sr -Si -Si -Si -Si +Zr +Zr +Zr +Zr Oa Oa Oa @@ -26786,10 +27245,10 @@ yb Si Sr Sr -Si -Si -Si -Si +Zr +Zr +Zr +Zr Oa Oa Oa @@ -27045,10 +27504,10 @@ Si Sr Sr Sr -Si -Si -Si -Si +Zr +Zr +Zr +Zr Oa Oa Oa @@ -27303,10 +27762,10 @@ Si Sr Sr Sr -Si -Si -Si -Si +Zr +Zr +Zr +Zr Oa Oa Oa @@ -27562,10 +28021,10 @@ Si Si Sr Sr -Si -Si -Si -Oa +Zr +Zr +nK +xZ Oa Oa yC @@ -27821,7 +28280,7 @@ Si Si Sr Sr -Si +Zr bw rN Oa diff --git a/maps/southern_cross/southern_cross-12.dmm b/maps/southern_cross/southern_cross-12.dmm index db423d6e19..633e7dd55e 100644 --- a/maps/southern_cross/southern_cross-12.dmm +++ b/maps/southern_cross/southern_cross-12.dmm @@ -8,6 +8,24 @@ "aE" = ( /turf/simulated/wall/solidrock, /area/surface/outside/wilderness/skylands) +"aK" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/railing/grey, +/turf/simulated/floor/plating/external, +/area/surface/outpost/shelter/exterior) +"bf" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/plating/external, +/area/surface/outpost/shelter/exterior) "bj" = ( /turf/simulated/mineral/sif, /area/surface/outside/wilderness/skylands) @@ -20,6 +38,11 @@ /obj/effect/zone_divider, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"bY" = ( +/obj/effect/catwalk_plated, +/obj/machinery/light, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) "bZ" = ( /turf/simulated/floor/outdoors/ice, /area/surface/outside/wilderness/skylands) @@ -27,6 +50,52 @@ /obj/structure/flora/ausbushes/pointybush, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"ck" = ( +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) +"cn" = ( +/obj/structure/simple_door/sifwood, +/obj/machinery/door/blast/shutters{ + dir = 4; + id = "wilderness_shelter_2nd_floor_door"; + layer = 4; + name = "Wilderness Shelter Shutters" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) +"cv" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/railing/grey{ + dir = 4 + }, +/turf/simulated/floor/plating/external, +/area/surface/outpost/shelter/exterior) +"cC" = ( +/obj/machinery/power/thermoregulator/southerncross{ + pixel_x = 1; + pixel_y = 26 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/table/standard, +/obj/fiftyspawner/plastic, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) +"cF" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "dd" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/effect/zone_divider, @@ -65,10 +134,27 @@ /obj/effect/zone_divider, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"em" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/log_sif, +/area/surface/outpost/shelter/dorms) "et" = ( /obj/structure/flora/grass/green, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"eP" = ( +/obj/structure/coatrack, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "fa" = ( /obj/structure/flora/grass/both, /turf/simulated/floor/outdoors/snow, @@ -77,6 +163,17 @@ /obj/structure/flora/tree/pine, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"fy" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/machinery/camera/network/exploration{ + c_tag = "WILD - Shelter Second Floor Exterior 3"; + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "fI" = ( /obj/structure/flora/grass/green, /turf/simulated/mineral/floor{ @@ -106,6 +203,30 @@ /obj/structure/flora/bush, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/wilderness/skylands) +"hs" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) +"hu" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice{ + pixel_y = -3 + }, +/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice{ + pixel_y = 6 + }, +/obj/item/device/binoculars{ + pixel_x = 5; + pixel_y = -3 + }, +/obj/item/device/binoculars{ + pixel_x = 5; + pixel_y = -3 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "hy" = ( /obj/structure/flora/rocks1, /turf/simulated/floor/outdoors/grass, @@ -126,14 +247,34 @@ /obj/structure/flora/smallbould, /turf/simulated/floor/water/deep, /area/surface/outside/wilderness/skylands) +"hR" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/structure/railing/grey{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "hU" = ( /obj/structure/flora/ausbushes/stalkybush, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"ie" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) "ih" = ( /obj/structure/flora/ausbushes, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/wilderness/skylands) +"in" = ( +/obj/structure/table/standard, +/obj/fiftyspawner/steel, +/obj/fiftyspawner/glass, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) "iu" = ( /obj/effect/zone_divider, /turf/simulated/mineral/floor/light{ @@ -144,10 +285,20 @@ /obj/structure/flora/ausbushes/grassybush, /turf/simulated/floor/outdoors/grass, /area/surface/outside/wilderness/skylands) +"jb" = ( +/obj/structure/closet/secure_closet/medical_wall{ + name = "Wilderness Shelter defibrillator closet"; + pixel_y = 31; + req_access = null; + req_one_access = list(1,3,43,66,67); + starts_with = list(/obj/item/device/defib_kit/loaded) + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "jc" = ( /obj/effect/catwalk_plated, /turf/simulated/floor/outdoors/dirt/sif/planetuse, -/area/surface/outside/wilderness/skylands) +/area/surface/outpost/shelter/exterior) "jh" = ( /obj/structure/flora/ausbushes/stalkybush, /obj/structure/flora/ausbushes/sparsegrass, @@ -180,11 +331,57 @@ /obj/structure/flora/ausbushes/grassybush, /turf/simulated/floor/outdoors/grass/heavy, /area/surface/outside/wilderness/skylands) +"ka" = ( +/obj/machinery/light/small, +/obj/structure/closet/secure_closet/guncabinet{ + anchored = 1; + req_one_access = list(1,3,43,67) + }, +/obj/item/weapon/storage/box/syndie_kit{ + max_storage_space = 20; + name = "box of 7.62mm clips"; + starts_with = list(/obj/item/ammo_magazine/clip/c762 = 10) + }, +/obj/item/weapon/storage/box/syndie_kit{ + max_storage_space = 20; + name = "box of 7.62mm clips"; + starts_with = list(/obj/item/ammo_magazine/clip/c762 = 10) + }, +/obj/item/device/binoculars, +/obj/item/device/binoculars, +/obj/item/weapon/gun/projectile/shotgun/pump/rifle{ + pixel_y = -3 + }, +/obj/item/weapon/gun/projectile/shotgun/pump/rifle{ + pixel_y = 6 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "kc" = ( /obj/structure/flora/ausbushes/brflowers, /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/outdoors/grass/heavy, /area/surface/outside/wilderness/skylands) +"kg" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/weapon/deck/cards{ + pixel_x = -1; + pixel_y = 4 + }, +/obj/item/weapon/deck/cah{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/weapon/deck/holder{ + pixel_x = -9; + pixel_y = 1 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = 1; + pixel_y = -1 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/surface/outpost/shelter/dorms) "km" = ( /obj/structure/flora/rocks1, /turf/simulated/floor/water/deep, @@ -193,10 +390,47 @@ /obj/structure/flora/rocks2, /turf/simulated/floor/water/deep, /area/surface/outside/wilderness/skylands) +"kB" = ( +/obj/structure/cable{ + d1 = 32; + icon_state = "32-1" + }, +/obj/structure/lattice, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/machinery/camera/network/exploration{ + c_tag = "WILD - Shelter Second Floor Utilities" + }, +/turf/simulated/open{ + temperature = 243.15 + }, +/area/surface/outpost/shelter/utilityroom) "kG" = ( /obj/structure/flora/ausbushes/brflowers, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/wilderness/skylands) +"kJ" = ( +/obj/structure/curtain/open/bed, +/turf/simulated/floor/carpet/sblucarpet, +/area/surface/outpost/shelter/dorms) +"kO" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 1 + }, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) "kZ" = ( /obj/structure/flora/ausbushes/palebush, /turf/simulated/floor/outdoors/grass/heavy, @@ -213,6 +447,18 @@ /obj/structure/flora/log1, /turf/simulated/floor/outdoors/mud, /area/surface/outside/wilderness/skylands) +"lP" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) +"lZ" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) "me" = ( /obj/structure/flora/bboulder2, /turf/simulated/floor/water, @@ -239,6 +485,15 @@ /obj/structure/flora/ausbushes/reedbush, /turf/simulated/floor/outdoors/mud, /area/surface/outside/wilderness/skylands) +"mG" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/surface/outpost/shelter/dorms) "mI" = ( /obj/structure/flora/ausbushes/fernybush, /turf/simulated/floor/water, @@ -248,6 +503,9 @@ /obj/structure/flora/ausbushes/fernybush, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"mP" = ( +/turf/simulated/wall/log_sif, +/area/surface/outpost/shelter) "mV" = ( /obj/structure/flora/ausbushes/stalkybush, /turf/simulated/floor/water, @@ -257,6 +515,13 @@ /obj/structure/flora/bboulder2, /turf/simulated/floor/water/deep, /area/surface/outside/wilderness/skylands) +"nj" = ( +/obj/structure/closet/walllocker_double/survival/north{ + name = "Wilderness Shelter Emergency Survival Wall Cabinet"; + starts_with = list(/obj/item/device/gps = 5,/obj/item/weapon/material/knife/tacknife/survival = 5,/obj/random/mre = 5,/obj/item/device/flashlight/color/yellow = 5,/obj/item/device/flashlight/flare = 5,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 5,/obj/item/weapon/whetstone) + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "ns" = ( /obj/structure/flora/ausbushes/ppflowers, /turf/simulated/floor/water/deep, @@ -328,6 +593,17 @@ outdoors = 1 }, /area/surface/outside/wilderness/skylands) +"ph" = ( +/obj/structure/closet, +/obj/item/weapon/storage/box/lights/bulbs, +/obj/item/weapon/storage/box/lights/mixed, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) "pl" = ( /obj/effect/zone_divider, /turf/simulated/floor/outdoors/dirt, @@ -366,6 +642,13 @@ "qJ" = ( /turf/simulated/mineral/floor/light, /area/surface/outside/wilderness/skylands) +"qK" = ( +/obj/machinery/alarm/sifwilderness{ + dir = 8; + pixel_x = 22 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "ra" = ( /obj/structure/flora/rocks1, /obj/structure/flora/lily1, @@ -411,6 +694,10 @@ /obj/effect/zone_divider, /turf/simulated/floor/water/deep, /area/surface/outside/wilderness/skylands) +"sk" = ( +/obj/structure/coatrack, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "sT" = ( /obj/structure/flora/log1, /obj/structure/flora/ausbushes/brflowers, @@ -428,12 +715,26 @@ /obj/effect/zone_divider, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"ti" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "tj" = ( /obj/structure/flora/ausbushes/reedbush, /obj/structure/flora/ausbushes/sparsegrass, /obj/effect/zone_divider, /turf/simulated/floor/outdoors/mud, /area/surface/outside/wilderness/skylands) +"tm" = ( +/obj/effect/catwalk_plated, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "tp" = ( /obj/structure/flora/rocks1, /obj/structure/flora/ausbushes/sunnybush, @@ -454,6 +755,16 @@ /obj/structure/flora/ausbushes/reedbush, /turf/simulated/floor/water/deep, /area/surface/outside/wilderness/skylands) +"tI" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/structure/railing/grey{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "tJ" = ( /obj/structure/flora/bboulder2, /turf/simulated/floor/water/deep, @@ -483,16 +794,49 @@ /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"uq" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12 + }, +/obj/structure/mirror{ + pixel_x = -24 + }, +/turf/simulated/floor/tiled/freezer, +/area/surface/outpost/shelter/dorms) "ux" = ( /obj/effect/landmark/map_data{ height = 2 }, /turf/simulated/wall/solidrock, /area/surface/outside/wilderness/skylands) +"uC" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "wilderness_shelter_2nd_floor"; + name = "Wilderness Shelter Shutters"; + pixel_x = 26; + req_one_access = null + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) +"uJ" = ( +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "uR" = ( /obj/effect/zone_divider, /turf/simulated/mineral/sif, /area/surface/outside/wilderness/skylands) +"uW" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "uX" = ( /obj/structure/flora/log1, /obj/structure/flora/lily3, @@ -515,6 +859,21 @@ /obj/effect/zone_divider, /turf/simulated/floor/water/deep, /area/surface/outside/wilderness/skylands) +"vS" = ( +/obj/structure/table/rack/shelf, +/obj/item/weapon/soap/nanotrasen, +/obj/item/weapon/soap/nanotrasen, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/freezer, +/area/surface/outpost/shelter/dorms) +"wb" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green, +/obj/structure/curtain/open/bed, +/turf/simulated/floor/carpet/sblucarpet, +/area/surface/outpost/shelter/dorms) "wx" = ( /obj/structure/flora/log2, /obj/structure/flora/rocks1, @@ -545,6 +904,32 @@ /obj/structure/flora/ausbushes/ppflowers, /turf/simulated/floor/outdoors/grass, /area/surface/outside/wilderness/skylands) +"xv" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/weapon/storage/toolbox/emergency{ + pixel_y = 6 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_y = -1 + }, +/obj/machinery/alarm/sifwilderness{ + dir = 4; + pixel_x = -22 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) +"xy" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "xG" = ( /obj/structure/flora/ausbushes/reedbush, /obj/structure/flora/ausbushes/sparsegrass, @@ -565,14 +950,10 @@ /turf/simulated/floor/outdoors/grass, /area/surface/outside/wilderness/skylands) "ye" = ( -/obj/effect/catwalk_plated, -/obj/structure/railing{ - dir = 1 - }, /turf/simulated/open{ temperature = 243.15 }, -/area/surface/outside/wilderness/skylands) +/area/surface/outpost/shelter/exterior) "yf" = ( /obj/effect/zone_divider, /turf/simulated/mineral/floor{ @@ -602,6 +983,15 @@ /obj/structure/flora/ausbushes/reedbush, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"yJ" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/device/flashlight/lamp/green, +/obj/machinery/camera/network/exploration{ + c_tag = "WILD - Shelter Crew Dorms"; + dir = 4 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/surface/outpost/shelter/dorms) "yK" = ( /obj/structure/flora/rocks1, /obj/structure/flora/bboulder2, @@ -627,11 +1017,47 @@ /obj/structure/flora/ausbushes/leafybush, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"Ae" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/weapon/storage/box{ + max_storage_space = 20; + name = "box of 7.62mm practice clips"; + pixel_x = 3; + pixel_y = 3; + starts_with = list(/obj/item/ammo_magazine/clip/c762/practice = 10) + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/weapon/storage/bag/trash{ + pixel_x = -9; + pixel_y = 5 + }, +/obj/item/weapon/storage/bag/trash{ + pixel_x = -9; + pixel_y = -5 + }, +/obj/item/weapon/storage/box{ + max_storage_space = 20; + name = "box of 7.62mm practice clips"; + pixel_x = 3; + pixel_y = -1; + starts_with = list(/obj/item/ammo_magazine/clip/c762/practice = 10) + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "Ah" = ( /obj/structure/flora/ausbushes/reedbush, /obj/structure/flora/ausbushes/fernybush, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"Ai" = ( +/obj/structure/ladder, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "Aj" = ( /obj/structure/flora/lily3, /obj/structure/flora/log2, @@ -650,15 +1076,42 @@ /obj/structure/flora/ausbushes/leafybush, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"Bo" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/machinery/light{ + layer = 3 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "BC" = ( /obj/structure/flora/lily3, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"BG" = ( +/obj/structure/undies_wardrobe, +/obj/machinery/light{ + dir = 1; + layer = 3 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "BM" = ( /obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes/stalkybush, /turf/simulated/floor/outdoors/grass/heavy, /area/surface/outside/wilderness/skylands) +"BU" = ( +/obj/effect/catwalk_plated, +/obj/structure/ladder, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) +"BY" = ( +/obj/structure/toilet, +/turf/simulated/floor/tiled/freezer, +/area/surface/outpost/shelter/dorms) "Ci" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/ausbushes/brflowers, @@ -670,6 +1123,13 @@ /obj/structure/flora/ausbushes/stalkybush, /turf/simulated/floor/outdoors/mud, /area/surface/outside/wilderness/skylands) +"Ct" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "Cz" = ( /turf/simulated/mineral/floor{ outdoors = 1 @@ -691,6 +1151,17 @@ /obj/effect/zone_divider, /turf/simulated/wall/solidrock, /area/surface/outside/wilderness/skylands) +"CT" = ( +/turf/simulated/wall/log_sif, +/area/surface/outpost/shelter/utilityroom) +"CZ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall/log_sif, +/area/surface/outpost/shelter/utilityroom) "Db" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/genericbush, @@ -701,6 +1172,17 @@ /obj/structure/flora/ausbushes/reedbush, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"DA" = ( +/obj/effect/catwalk_plated, +/obj/machinery/button/remote/blast_door{ + dir = 4; + id = "wilderness_shelter_2nd_floor_door"; + name = "Wilderness Shelter Shutters"; + pixel_x = -26; + req_one_access = list(1,5,10,12,13,18,31,43,47,48,50) + }, +/turf/simulated/floor/outdoors/dirt/sif/planetuse, +/area/surface/outpost/shelter/exterior) "DD" = ( /turf/simulated/open{ temperature = 243.15 @@ -711,6 +1193,16 @@ /obj/structure/flora/ausbushes/reedbush, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"DM" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "DN" = ( /obj/structure/flora/ausbushes/ppflowers, /turf/simulated/floor/outdoors/mud, @@ -719,6 +1211,10 @@ /obj/structure/flora/ausbushes/brflowers, /turf/simulated/floor/outdoors/grass/heavy, /area/surface/outside/wilderness/skylands) +"Ec" = ( +/obj/structure/simple_door/sifwood, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "Es" = ( /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/outdoors/grass/heavy, @@ -777,6 +1273,14 @@ /obj/structure/flora/smallbould, /turf/simulated/floor/outdoors/grass/heavy, /area/surface/outside/wilderness/skylands) +"Gg" = ( +/obj/structure/closet/medical_wall{ + name = "Wilderness Shelter first-aid closet"; + pixel_y = 31; + starts_with = list(/obj/item/roller,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/firstaid/regular = 2,obj/item/weapon/storage/pill_bottle/spaceacillin) + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "Gp" = ( /obj/structure/flora/tree/dead, /obj/structure/flora/log2, @@ -791,6 +1295,12 @@ /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"GN" = ( +/turf/simulated/wall/log_sif, +/area/surface/outpost/shelter/dorms) +"GS" = ( +/turf/simulated/wall/rsifwood, +/area/surface/outside/wilderness/skylands) "Hb" = ( /obj/structure/flora/ausbushes/ywflowers, /turf/simulated/floor/outdoors/grass/heavy, @@ -812,6 +1322,11 @@ /obj/structure/flora/bboulder1, /turf/simulated/floor/water, /area/surface/outside/wilderness/skylands) +"HI" = ( +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "HJ" = ( /obj/structure/flora/rocks1, /turf/simulated/floor/outdoors/dirt, @@ -822,6 +1337,18 @@ outdoors = 1 }, /area/surface/outside/wilderness/skylands) +"Ii" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "Ip" = ( /obj/structure/flora/smallbould, /turf/simulated/floor/outdoors/dirt, @@ -843,16 +1370,33 @@ /obj/structure/flora/log1, /turf/simulated/floor/outdoors/mud, /area/surface/outside/wilderness/skylands) +"JU" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/thermoregulator/southerncross{ + dir = 4; + pixel_x = -26; + pixel_y = 2 + }, +/obj/structure/closet/crate/bin, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "Kf" = ( /obj/structure/flora/ausbushes/lavendergrass, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/wilderness/skylands) -"Kk" = ( -/obj/effect/catwalk_plated, -/turf/simulated/open{ - temperature = 243.15 +"Kq" = ( +/obj/machinery/camera/network/exploration{ + c_tag = "WILD - Shelter Second Floor"; + dir = 8 }, -/area/surface/outside/wilderness/skylands) +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "Kr" = ( /obj/structure/flora/rocks1, /obj/structure/flora/bboulder2, @@ -867,6 +1411,12 @@ /obj/structure/flora/grass/brown, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/wilderness/skylands) +"KF" = ( +/obj/structure/bed/chair/comfy/blue{ + dir = 1 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/surface/outpost/shelter/dorms) "KS" = ( /obj/structure/flora/ausbushes/reedbush, /turf/simulated/floor/water, @@ -894,10 +1444,36 @@ /obj/structure/flora/grass/both, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/wilderness/skylands) +"LU" = ( +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) +"Mb" = ( +/turf/simulated/floor/tiled/freezer, +/area/surface/outpost/shelter/dorms) "Me" = ( /obj/structure/flora/ausbushes/sunnybush, /turf/simulated/floor/outdoors/grass/heavy, /area/surface/outside/wilderness/skylands) +"Mr" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/washing_machine, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) +"Mw" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/wall/log_sif, +/area/surface/outpost/shelter) "MB" = ( /obj/structure/flora/tree/palm, /obj/effect/overlay/coconut, @@ -918,10 +1494,35 @@ /obj/structure/flora/rocks2, /turf/simulated/floor/outdoors/grass/heavy, /area/surface/outside/wilderness/skylands) +"MY" = ( +/obj/effect/catwalk_plated, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "MZ" = ( /obj/structure/flora/rocks2, /turf/simulated/floor/outdoors/grass, /area/surface/outside/wilderness/skylands) +"Nq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "wilderness_shelter_2nd_floor"; + layer = 4; + name = "Wilderness Shelter Shutters" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) +"Nu" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 1 + }, +/turf/simulated/floor/plating/external, +/area/surface/outpost/shelter/exterior) "NH" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ppflowers, @@ -932,6 +1533,15 @@ /obj/structure/flora/ausbushes/ywflowers, /turf/simulated/floor/outdoors/grass, /area/surface/outside/wilderness/skylands) +"Oj" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "Ol" = ( /obj/structure/flora/bush, /turf/simulated/floor/outdoors/snow, @@ -961,6 +1571,19 @@ /obj/structure/flora/ausbushes/stalkybush, /turf/simulated/floor/outdoors/grass, /area/surface/outside/wilderness/skylands) +"OQ" = ( +/obj/effect/catwalk_plated, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "OW" = ( /obj/structure/flora/tree/jungle_small, /obj/structure/flora/ausbushes/sparsegrass, @@ -1000,11 +1623,30 @@ /obj/structure/flora/tree/jungle, /turf/simulated/floor/outdoors/grass/heavy, /area/surface/outside/wilderness/skylands) +"Rb" = ( +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "wilderness_shelter_2nd_floor_door"; + name = "Wilderness Shelter Shutters"; + pixel_x = 26 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) "Rh" = ( /turf/simulated/mineral/floor/light{ outdoors = 1 }, /area/surface/outside/wilderness/skylands) +"Rl" = ( +/obj/structure/curtain/open/shower, +/obj/machinery/shower{ + pixel_y = 16 + }, +/obj/structure/window/basic{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/surface/outpost/shelter/dorms) "Rm" = ( /obj/structure/flora/log1, /turf/simulated/floor/outdoors/dirt, @@ -1016,6 +1658,23 @@ outdoors = 1 }, /area/surface/outside/wilderness/skylands) +"Ru" = ( +/obj/structure/simple_door/sifwood, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) +"RF" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "RG" = ( /obj/structure/flora/grass/brown, /turf/simulated/mineral/floor/light{ @@ -1027,6 +1686,16 @@ /obj/structure/flora/bboulder1, /turf/simulated/floor/outdoors/grass, /area/surface/outside/wilderness/skylands) +"RO" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/effect/catwalk_plated, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "RW" = ( /obj/structure/flora/log2, /obj/structure/flora/grass/green, @@ -1046,6 +1715,32 @@ outdoors = 1 }, /area/surface/outside/wilderness/skylands) +"Sd" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/simulated/floor/carpet/turcarpet, +/area/surface/outpost/shelter/dorms) +"Se" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/thermoregulator/southerncross{ + dir = 8; + pixel_x = 26; + pixel_y = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "So" = ( /obj/structure/flora/tree/bigtree, /obj/structure/flora/ausbushes/grassybush, @@ -1062,6 +1757,14 @@ outdoors = 1 }, /area/surface/outside/wilderness/skylands) +"ST" = ( +/obj/effect/catwalk_plated, +/obj/machinery/camera/network/exploration{ + c_tag = "WILD - Shelter Second Floor Exterior 1"; + dir = 4 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) "Te" = ( /obj/structure/flora/log1, /turf/simulated/mineral/floor{ @@ -1082,6 +1785,13 @@ /obj/structure/flora/ausbushes/stalkybush, /turf/simulated/floor/outdoors/grass, /area/surface/outside/wilderness/skylands) +"TC" = ( +/obj/structure/closet/hydrant{ + pixel_y = -26 + }, +/obj/structure/table/standard, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) "TD" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/structure/flora/ausbushes/stalkybush, @@ -1138,6 +1848,12 @@ /obj/effect/zone_divider, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"VD" = ( +/obj/structure/bed/chair/bay/comfy/blue{ + dir = 8 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "VE" = ( /obj/effect/zone_divider, /turf/simulated/floor/outdoors/grass/heavy, @@ -1153,12 +1869,27 @@ /obj/effect/zone_divider, /turf/simulated/mineral, /area/surface/outside/wilderness/skylands) +"Wi" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "Wn" = ( /obj/structure/flora/rocks2, /obj/structure/flora/grass/green, /obj/effect/zone_divider, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/wilderness/skylands) +"Wv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "WB" = ( /obj/effect/zone_divider, /turf/simulated/floor/outdoors/rocks, @@ -1168,6 +1899,52 @@ /obj/effect/zone_divider, /turf/simulated/floor/outdoors/dirt, /area/surface/outside/wilderness/skylands) +"WH" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/machinery/cell_charger, +/obj/machinery/recharger/wallcharger{ + pixel_x = -24; + pixel_y = -4 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -5 + }, +/obj/item/clothing/glasses/sunglasses{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/clothing/glasses/sunglasses{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/clothing/glasses/sunglasses{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/clothing/glasses/sunglasses{ + pixel_x = 3; + pixel_y = -2 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) "WI" = ( /obj/structure/flora/rocks1, /obj/structure/flora/ausbushes/ppflowers, @@ -1221,22 +1998,68 @@ /obj/structure/flora/tree/winter, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"XJ" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/yellowdouble, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) "XK" = ( /obj/structure/flora/ausbushes/ppflowers, /obj/effect/zone_divider, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"XU" = ( +/obj/effect/catwalk_plated, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/machinery/camera/network/exploration{ + c_tag = "WILD - Shelter Second Floor Exterior 2"; + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/exterior) +"XX" = ( +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) "Yb" = ( /obj/structure/flora/ausbushes/palebush, /obj/structure/flora/ausbushes/ppflowers, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"Ym" = ( +/obj/machinery/light{ + layer = 3 + }, +/obj/machinery/autolathe, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) "Ys" = ( /obj/structure/flora/ausbushes, /turf/simulated/mineral/floor{ outdoors = 1 }, /area/surface/outside/wilderness/skylands) +"Yu" = ( +/obj/structure/simple_door/sifwood, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/dorms) +"Yv" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/table/standard, +/obj/structure/bedsheetbin{ + pixel_x = 2 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter/utilityroom) "YA" = ( /obj/structure/flora/tree/winter1, /turf/simulated/floor/outdoors/snow, @@ -1249,6 +2072,14 @@ /obj/structure/flora/rocks2, /turf/simulated/floor/outdoors/snow, /area/surface/outside/wilderness/skylands) +"Zr" = ( +/obj/machinery/bluespace_beacon{ + alpha = 0; + desc = "A device that draws power from bluespace and creates a permanent tracking beacon. This one has a cloaking field. How keen of you to notice!"; + name = "Wilderness Shelter Bluespace Gigabeacon" + }, +/turf/simulated/floor/wood/sif, +/area/surface/outpost/shelter) (1,1,1) = {" aE @@ -20853,8 +21684,8 @@ WO WO WO WO -WO -WO +hR +uW bj aE "} @@ -21103,16 +21934,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +DM +uW +uW +uW +uW +RF +fy +uW +OQ +BU bj aE "} @@ -21361,16 +22192,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +ti +GN +GN +GN +GN +GN +GN +GN +em +GN bj aE "} @@ -21619,16 +22450,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +ti +GN +BY +uq +vS +GN +Wi +eP +Oj +GN bj aE "} @@ -21877,16 +22708,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +ti +GN +Rl +Mb +mG +Yu +LU +Wv +LU +GN bj aE "} @@ -22135,16 +22966,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +ti +GN +GN +GN +GN +GN +LU +Wv +LU +GN bj aE "} @@ -22393,16 +23224,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +Bo +GN +BG +LU +Sd +yJ +KF +Wv +ck +GN bj aE "} @@ -22651,16 +23482,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +ti +GN +sk +LU +Sd +kg +KF +Wv +LU +GN bj aE "} @@ -22909,16 +23740,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +ti +GN +kJ +kJ +LU +HI +LU +Wv +LU +GN bj aE "} @@ -23167,16 +23998,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +ti +GN +XJ +wb +qK +lP +Ii +Se +LU +GN bj aE "} @@ -23425,17 +24256,17 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -bj +XU +mP +mP +mP +mP +mP +mP +CZ +Ru +CT +CT aE "} (87,1,1) = {" @@ -23683,17 +24514,17 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -bj +ti +Nq +JU +Ae +WH +xv +Mw +kB +hs +ie +CT aE "} (88,1,1) = {" @@ -23941,17 +24772,17 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -bj +ti +mP +jb +uJ +VD +hu +mP +Mr +lZ +in +CT aE "} (89,1,1) = {" @@ -24199,17 +25030,17 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -bj +Bo +mP +nj +Zr +uJ +ka +mP +Yv +XX +Ym +CT aE "} (90,1,1) = {" @@ -24457,17 +25288,17 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -bj +ti +mP +Gg +uJ +uJ +Ai +mP +cC +XX +TC +CT aE "} (91,1,1) = {" @@ -24715,17 +25546,17 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -bj +ti +Nq +uC +Kq +uJ +uJ +Ec +Rb +XX +ph +CT aE "} (92,1,1) = {" @@ -24973,17 +25804,17 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -bj +ti +mP +mP +mP +mP +mP +mP +CT +cn +CT +CT aE "} (93,1,1) = {" @@ -25231,16 +26062,16 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO -WO -WO -WO +tI +cF +cF +MY +MY +tm +ST +DA +jc +jc bj aE "} @@ -25492,13 +26323,13 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO +xy +MY +MY +MY +jc +jc +jc bj aE "} @@ -25750,13 +26581,13 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO +xy +MY +MY +MY +jc +jc +jc bj aE "} @@ -26008,13 +26839,13 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO +xy +MY +MY +MY +jc +jc +jc bj aE "} @@ -26266,13 +27097,13 @@ WO WO WO WO -WO -WO -WO -WO -WO -WO -WO +RO +Ct +Ct +Ct +jc +jc +jc bj aE "} @@ -26528,9 +27359,9 @@ WO WO WO WO -WO -WO -WO +kO +jc +jc bj aE "} @@ -26786,9 +27617,9 @@ WO WO WO WO -WO -WO -WO +kO +jc +jc bj aE "} @@ -27044,9 +27875,9 @@ WO WO WO WO -WO -WO -bj +kO +bY +GS bj aE "} @@ -27302,8 +28133,8 @@ WO WO WO WO -WO -WO +kO +jc bj bj aE @@ -27560,8 +28391,8 @@ WO WO WO WO -WO -WO +kO +jc bj bj aE @@ -27818,8 +28649,8 @@ WO WO WO WO -WO -WO +Nu +jc bj bj aE @@ -28076,8 +28907,8 @@ WO WO WO WO -ye -Kk +Nu +jc bj bj aE @@ -28334,7 +29165,7 @@ WO WO WO WO -ye +Nu jc bj bj @@ -28592,8 +29423,8 @@ WO WO WO WO +aK ye -DD bj bj aE @@ -28850,8 +29681,8 @@ WO WO WO WO +aK ye -DD bj bj aE @@ -29108,8 +29939,8 @@ WO WO WO WO -ye -Kk +cv +bf bj bj aE diff --git a/maps/southern_cross/southern_cross-2.dmm b/maps/southern_cross/southern_cross-2.dmm index b786783220..daf444d713 100644 --- a/maps/southern_cross/southern_cross-2.dmm +++ b/maps/southern_cross/southern_cross-2.dmm @@ -2152,24 +2152,29 @@ dir = 9 }, /obj/structure/cable/orange{ + d1 = 4; d2 = 10; - icon_state = "0-10" + icon_state = "4-10" }, /turf/simulated/floor/tiled/dark, /area/engineering/hallway/atmos_hallway) "afJ" = ( -/obj/machinery/hologram/holopad, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/outline/grey, /obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, /turf/simulated/floor/tiled/dark, /area/engineering/hallway/atmos_hallway) "afK" = ( -/turf/simulated/floor/tiled, +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, /area/engineering/hallway/atmos_hallway) "afL" = ( /obj/effect/floor_decal/industrial/warning{ @@ -2412,6 +2417,9 @@ /area/engineering/foyer) "agv" = ( /obj/structure/undies_wardrobe, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled/freezer, /area/security/security_restroom) "agw" = ( @@ -2623,7 +2631,7 @@ /obj/machinery/computer/general_air_control{ frequency = 1445; name = "Engine Exhaust Monitoring"; - sensors = list("engine_exhaust_sensor" = "Engine Exhaust Sensor") + sensors = list("engine_exhaust_sensor"="Engine Exhaust Sensor") }, /turf/simulated/floor, /area/engineering/engine_waste) @@ -2801,28 +2809,14 @@ /turf/simulated/floor/tiled/dark, /area/security/armoury) "ahs" = ( -/obj/structure/table/marble, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 }, -/obj/machinery/button/remote/blast_door{ - id = "coffeeshop"; - name = "Cafe Shutters"; - pixel_y = 26 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -28 - }, -/obj/machinery/button/neonsign{ - id = "cafeopen"; - name = "Cafe Sign Switch"; - pixel_x = 11; - pixel_y = 27 - }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/structure/flora/ausbushes/ywflowers, +/obj/machinery/beehive, +/turf/simulated/floor/grass, +/area/hydroponics) "aht" = ( /obj/structure/extinguisher_cabinet{ pixel_y = -30 @@ -3751,6 +3745,16 @@ }, /turf/simulated/floor/tiled, /area/engineering/atmos) +"akl" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/cafeteria) "ako" = ( /obj/machinery/hologram/holopad, /obj/effect/floor_decal/industrial/outline/grey, @@ -3948,7 +3952,7 @@ input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; - sensors = list("n2o_sensor" = "Tank") + sensors = list("n2o_sensor"="Tank") }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/borderfloor{ @@ -4175,9 +4179,6 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "alO" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 6 - }, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -4186,6 +4187,9 @@ opacity = 0 }, /obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, /obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor, /area/engineering/engine_room) @@ -4374,7 +4378,6 @@ /area/maintenance/security_port) "amP" = ( /obj/machinery/door/firedoor/border_only, -/obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -4382,9 +4385,10 @@ name = "Engine Radiator Viewport Shutter"; opacity = 0 }, -/obj/machinery/atmospherics/pipe/manifold/visible/green{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + color = "#00ff00" }, +/obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor, /area/engineering/engine_room) "amR" = ( @@ -4680,10 +4684,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/cap/visible{ - color = "#00ff00"; - dir = 1 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "anW" = ( @@ -4879,6 +4880,7 @@ /obj/effect/floor_decal/corner/green/border{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "aoM" = ( @@ -4889,9 +4891,6 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/seconddeck/fpcenter) "aoO" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 - }, /obj/effect/floor_decal/borderfloor{ dir = 4 }, @@ -4902,19 +4901,21 @@ dir = 8; pixel_x = 22 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "aoP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall, -/area/maintenance/substation/central) +/obj/structure/table/woodentable, +/obj/item/device/camera_film, +/obj/item/device/camera, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/artgallery) "aoR" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/light{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "aoS" = ( @@ -5222,25 +5223,22 @@ /turf/simulated/floor/tiled/hydro, /area/hallway/primary/seconddeck/fpcenter) "apJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/floor_decal/borderfloor{ dir = 8 }, /obj/effect/floor_decal/corner/green/border{ dir = 8 }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "apK" = ( /obj/machinery/status_display{ pixel_x = 32 }, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -5252,6 +5250,10 @@ /obj/effect/floor_decal/corner/red/border{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "apL" = ( @@ -5260,12 +5262,12 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/wall, /area/maintenance/substation/central) "apN" = ( -/obj/structure/disposalpipe/up{ - dir = 1 - }, /obj/structure/cable{ d1 = 16; d2 = 0; @@ -5284,6 +5286,9 @@ /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/up{ + dir = 8 + }, /turf/simulated/floor/plating, /area/maintenance/substation/central) "apO" = ( @@ -5324,6 +5329,7 @@ /obj/effect/floor_decal/corner/green/border{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "apW" = ( @@ -5341,6 +5347,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "apX" = ( @@ -5374,7 +5381,7 @@ input_tag = "tox_in"; name = "Phoron Supply Control"; output_tag = "tox_out"; - sensors = list("tox_sensor" = "Tank") + sensors = list("tox_sensor"="Tank") }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/borderfloor{ @@ -5429,7 +5436,7 @@ /obj/machinery/computer/general_air_control{ frequency = 1441; name = "Tank Monitor"; - sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank") + sensors = list("n2_sensor"="Nitrogen","o2_sensor"="Oxygen","co2_sensor"="Carbon Dioxide","tox_sensor"="Toxins","n2o_sensor"="Nitrous Oxide","waste_sensor"="Gas Mix Tank") }, /turf/simulated/floor/tiled, /area/engineering/atmos/monitoring) @@ -5444,7 +5451,7 @@ frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; - sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Engine Waste") + sensors = list("mair_in_meter"="Mixed Air In","air_sensor"="Mixed Air Supply Tank","mair_out_meter"="Mixed Air Out","dloop_atm_meter"="Distribution Loop","wloop_atm_meter"="Engine Waste") }, /turf/simulated/floor/tiled, /area/engineering/atmos/monitoring) @@ -5614,10 +5621,10 @@ /obj/effect/floor_decal/corner/green/bordercorner2{ dir = 10 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "aqQ" = ( -/obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor{ dir = 4 }, @@ -5657,6 +5664,7 @@ /obj/effect/floor_decal/corner/green/bordercorner2{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "arb" = ( @@ -6063,6 +6071,9 @@ pixel_x = -25; req_access = list(10) }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, /turf/simulated/floor, /area/engineering/engine_room) "asa" = ( @@ -6271,7 +6282,6 @@ /turf/simulated/floor/tiled/hydro, /area/hallway/primary/seconddeck/fpcenter) "asR" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light{ dir = 4 }, @@ -6543,9 +6553,14 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, +/obj/machinery/light{ + dir = 8 + }, /obj/machinery/atmospherics/valve/digital{ name = "secondary TEG valve" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor, /area/engineering/engine_room) "atI" = ( @@ -6882,6 +6897,15 @@ /obj/structure/loot_pile/maint/junk, /turf/simulated/floor/plating, /area/maintenance/engineering) +"auQ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain5, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "auR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -7083,6 +7107,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/red{ dir = 4 }, +/obj/structure/cable/orange{ + d2 = 10; + icon_state = "0-10" + }, /turf/simulated/floor/tiled/dark, /area/engineering/hallway/atmos_hallway) "avA" = ( @@ -7180,6 +7208,9 @@ /obj/effect/floor_decal/corner/purple/bordercorner{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/ascenter) "avT" = ( @@ -7268,6 +7299,7 @@ dir = 8 }, /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "awl" = ( @@ -7669,6 +7701,11 @@ d2 = 5; icon_state = "2-5" }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled/dark, /area/engineering/hallway/atmos_hallway) "axC" = ( @@ -7856,6 +7893,7 @@ dir = 1 }, /obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "aym" = ( @@ -8177,9 +8215,6 @@ dir = 4 }, /obj/machinery/light/small{ - brightness_color = "#DA0205"; - brightness_power = 1; - brightness_range = 5; dir = 8 }, /turf/simulated/floor/tiled/freezer, @@ -8303,6 +8338,9 @@ /obj/effect/floor_decal/corner/red/bordercorner{ dir = 8 }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/security/security_lockerroom) "azD" = ( @@ -8711,6 +8749,10 @@ pixel_y = -6; req_access = list(10) }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "aAK" = ( @@ -8978,6 +9020,9 @@ /obj/machinery/camera/network/engine{ c_tag = "ENG - Engine Core 3" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor, /area/engineering/engine_room) "aCd" = ( @@ -9008,6 +9053,9 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, /turf/simulated/floor, /area/engineering/engine_room) "aCg" = ( @@ -9355,6 +9403,13 @@ pixel_y = 30; specialfunctions = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "aDy" = ( @@ -9371,6 +9426,12 @@ req_access = list(10) }, /obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor, /area/engineering/engine_smes) "aDz" = ( @@ -9398,6 +9459,12 @@ name = "Powernet Sensor - Engine Output"; name_tag = "Engine Output" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/engineering/engine_smes) "aDA" = ( @@ -9419,9 +9486,12 @@ name = "Station Intercom (General)"; pixel_y = 21 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/engine_smes) "aDB" = ( @@ -9433,8 +9503,8 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -9992,6 +10062,7 @@ /turf/simulated/wall, /area/security/security_equiptment_storage) "aFF" = ( +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "aFG" = ( @@ -10001,6 +10072,9 @@ /obj/effect/floor_decal/corner/green/bordercorner{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "aFH" = ( @@ -10346,6 +10420,10 @@ /obj/effect/floor_decal/corner/green/border{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "aHk" = ( @@ -11930,6 +12008,7 @@ /obj/effect/floor_decal/corner/green/bordercorner{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "aLX" = ( @@ -12203,7 +12282,6 @@ /area/hallway/primary/seconddeck/apcenter) "aMR" = ( /obj/machinery/door/firedoor/border_only, -/obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -12214,6 +12292,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 9 }, +/obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor, /area/engineering/engine_room) "aMS" = ( @@ -13197,6 +13276,7 @@ /obj/machinery/atmospherics/pipe/cap/visible{ color = "#00ffff" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "aPN" = ( @@ -13289,11 +13369,13 @@ /turf/simulated/wall/r_wall, /area/engineering/workshop) "aQb" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 +/obj/machinery/door/window/northleft{ + req_one_access = list(35,28); + req_access = newlist(); + name = "Animal Pen" }, -/turf/simulated/wall, -/area/library) +/turf/simulated/floor/grass, +/area/hydroponics) "aQd" = ( /obj/structure/table/rack{ dir = 1 @@ -13351,9 +13433,6 @@ "aQv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 2; d2 = 4; @@ -13510,18 +13589,12 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/apcenter) "aQR" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "aQV" = ( /obj/effect/floor_decal/steeldecal/steel_decals4, /obj/effect/floor_decal/steeldecal/steel_decals4{ @@ -13759,10 +13832,13 @@ /turf/simulated/floor, /area/engineering/engine_waste) "aRE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/valve/digital{ + name = "secondary TEG valve" + }, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, +/obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor, /area/engineering/engine_room) "aRK" = ( @@ -13941,10 +14017,6 @@ /area/hallway/secondary/entry/D2/arrivals) "aSq" = ( /obj/structure/lattice, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/cable/green{ d1 = 32; d2 = 4; @@ -14396,12 +14468,19 @@ /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, /turf/simulated/floor, /area/engineering/engine_room) "aTu" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, +/obj/machinery/atmospherics/valve/digital{ + name = "secondary TEG valve" + }, +/obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor, /area/engineering/engine_room) "aTv" = ( @@ -14584,8 +14663,15 @@ }, /turf/simulated/floor/plating, /area/maintenance/engineering) +"aTZ" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 2; + name = "Coffee Shop"; + sortType = "Coffee Shop" + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "aUc" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -14955,7 +15041,6 @@ /turf/simulated/floor, /area/engineering/engine_room) "aUT" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, @@ -15477,7 +15562,6 @@ name = "Emergency Cooling Valve 1" }, /obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/industrial/outline, /turf/simulated/floor, /area/engineering/engine_room) @@ -15732,6 +15816,9 @@ /obj/effect/floor_decal/corner/purple/border{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/ascenter) "aXK" = ( @@ -15744,6 +15831,9 @@ /obj/effect/floor_decal/corner/purple/bordercorner{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/ascenter) "aXM" = ( @@ -16069,12 +16159,6 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, /turf/simulated/floor, /area/engineering/engine_room) "aYC" = ( @@ -16087,30 +16171,20 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Engine Power"; + name_tag = "Engine Power" }, /turf/simulated/floor, /area/engineering/engine_room) "aYD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/computer/security/engineering{ +/obj/item/modular_computer/console/preset/engineering{ dir = 4 }, /turf/simulated/floor/tiled, /area/engineering/engine_monitoring) "aYE" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/effect/floor_decal/industrial/warning{ dir = 4 }, @@ -16119,6 +16193,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "aYF" = ( @@ -16153,8 +16228,15 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "aYX" = ( -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "aZc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -16692,6 +16774,7 @@ dir = 8 }, /obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "bax" = ( @@ -16789,9 +16872,6 @@ }, /turf/simulated/floor, /area/engineering/engine_room) -"baF" = ( -/turf/simulated/floor, -/area/engineering/engine_room) "baG" = ( /obj/structure/cable/cyan{ d1 = 4; @@ -16803,7 +16883,7 @@ input_tag = "cooling_in"; name = "Engine Cooling Control"; output_tag = "cooling_out"; - sensors = list("engine_sensor" = "Engine Core") + sensors = list("engine_sensor"="Engine Core") }, /turf/simulated/floor/tiled, /area/engineering/engine_monitoring) @@ -17338,22 +17418,23 @@ /turf/simulated/floor, /area/engineering/engine_room) "bcs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/effect/engine_setup/coolant_canister, /turf/simulated/floor, /area/engineering/engine_room) "bcu" = ( /obj/machinery/atmospherics/portables_connector, /obj/effect/floor_decal/industrial/outline/blue, /obj/effect/engine_setup/coolant_canister, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "bcv" = ( -/obj/item/modular_computer/console/preset/engineering{ +/obj/item/device/geiger/wall/south, +/obj/machinery/computer/security/engineering{ dir = 4 }, -/obj/item/device/geiger/wall/south, /turf/simulated/floor/tiled, /area/engineering/engine_monitoring) "bcw" = ( @@ -17731,6 +17812,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor, /area/engineering/engine_room) "bec" = ( @@ -18273,8 +18357,8 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 4 }, /turf/simulated/floor, /area/engineering/engine_room) @@ -18869,6 +18953,9 @@ dir = 8; pixel_x = 22 }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + color = "#00ff00" + }, /turf/simulated/floor, /area/engineering/engine_room) "bhL" = ( @@ -18913,6 +19000,9 @@ /obj/item/stack/cable_coil/yellow, /obj/item/stack/cable_coil/yellow, /obj/item/weapon/storage/box/lights/mixed, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/engineering/engine_smes) "bhN" = ( @@ -19065,6 +19155,9 @@ /obj/effect/floor_decal/corner/red/border{ dir = 4 }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/security/main) "biE" = ( @@ -19317,6 +19410,9 @@ icon_state = "0-8" }, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, /turf/simulated/floor, /area/engineering/engine_room) "bjf" = ( @@ -19328,6 +19424,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 6 + }, /turf/simulated/floor, /area/engineering/engine_room) "bjh" = ( @@ -19335,6 +19434,9 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 9 + }, /turf/simulated/floor, /area/engineering/engine_room) "bjt" = ( @@ -19958,6 +20060,7 @@ "bkK" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "bkL" = ( @@ -19993,12 +20096,12 @@ /turf/simulated/floor, /area/engineering/engine_room) "bkP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 10 - }, /obj/effect/floor_decal/industrial/warning{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 4 + }, /turf/simulated/floor, /area/engineering/engine_room) "bkR" = ( @@ -20555,6 +20658,12 @@ pixel_x = 32 }, /obj/effect/floor_decal/industrial/outline, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, /turf/simulated/floor/plating, /area/engineering/engine_room) "bmw" = ( @@ -20964,6 +21073,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, /turf/simulated/floor, /area/engineering/engine_room) "bnN" = ( @@ -20992,21 +21104,32 @@ d2 = 4; icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, /turf/simulated/floor, /area/engineering/engine_room) "bnQ" = ( /obj/effect/floor_decal/industrial/outline/blue, /obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plating, /area/engineering/engine_room) "bnR" = ( /obj/effect/floor_decal/industrial/outline/blue, /obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plating, /area/engineering/engine_room) "bnS" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/floor_decal/industrial/outline, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, /turf/simulated/floor/plating, /area/engineering/engine_room) "bnW" = ( @@ -22396,23 +22519,13 @@ /turf/simulated/floor/plating, /area/maintenance/bar) "bsi" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = 5; - pixel_y = 6 +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, -/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ - pixel_x = -4; - pixel_y = 6 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 32 - }, -/obj/machinery/camera/network/civilian{ - c_tag = "CIV - Gym Starboard" - }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "bsn" = ( /obj/machinery/door/firedoor/border_only, /obj/effect/wingrille_spawn/reinforced, @@ -22933,11 +23046,11 @@ /turf/simulated/floor/plating, /area/medical/patient_b) "buq" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/seconddeck/aft) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "buu" = ( /obj/structure/cable/green{ d1 = 1; @@ -23782,10 +23895,6 @@ name = "Kitchen Delivery"; req_access = list(28) }, -/obj/machinery/alarm/freezer{ - dir = 8; - pixel_x = 22 - }, /turf/simulated/floor/tiled, /area/crew_quarters/kitchen) "bwI" = ( @@ -25494,7 +25603,7 @@ input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; - sensors = list("n2_sensor" = "Tank") + sensors = list("n2_sensor"="Tank") }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -25652,7 +25761,7 @@ input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; - sensors = list("o2_sensor" = "Tank") + sensors = list("o2_sensor"="Tank") }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -25719,7 +25828,7 @@ name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000; - sensors = list("air_sensor" = "Tank") + sensors = list("air_sensor"="Tank") }, /turf/simulated/floor/tiled, /area/engineering/atmos) @@ -26004,7 +26113,7 @@ input_tag = "waste_in"; name = "Gas Mix Tank Control"; output_tag = "waste_out"; - sensors = list("waste_sensor" = "Tank") + sensors = list("waste_sensor"="Tank") }, /obj/machinery/light/spot{ dir = 1 @@ -26746,9 +26855,14 @@ "bEZ" = ( /obj/structure/table/woodentable, /obj/item/device/tape/random, -/obj/item/device/taperecorder, -/turf/simulated/floor/wood, -/area/library) +/obj/machinery/light{ + dir = 4 + }, +/obj/item/device/starcaster_news{ + pixel_x = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "bFa" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ywflowers, @@ -27030,6 +27144,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/security/security_hallway) "bFP" = ( @@ -27377,9 +27494,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/carpet/oracarpet, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "bGZ" = ( /turf/simulated/wall, /area/maintenance/substation/medical) @@ -27705,13 +27821,8 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "bHV" = ( /obj/machinery/door/blast/regular{ density = 0; @@ -28257,6 +28368,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "bKb" = ( @@ -29325,10 +29437,6 @@ name = "west bump"; pixel_x = -24 }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, /obj/effect/floor_decal/corner/yellow/diagonal, /obj/machinery/light_switch{ dir = 4; @@ -29341,32 +29449,30 @@ pixel_y = -10; range = 9 }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "bOi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/yellow/diagonal, -/turf/simulated/floor/tiled/white, +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/old_tile/yellow, /area/crew_quarters/coffee_shop) "bOj" = ( -/obj/structure/disposalpipe/segment{ +/obj/effect/floor_decal/steeldecal/monofloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/seconddeck/artgallery) +"bOk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/floor_decal/corner/yellow/diagonal, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "bOl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -29940,9 +30046,6 @@ id_tag = "co2_sensor" }, /obj/machinery/light/small{ - brightness_color = "#DA0205"; - brightness_power = 1; - brightness_range = 5; dir = 8 }, /turf/simulated/floor/reinforced/carbon_dioxide, @@ -30117,7 +30220,7 @@ input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"; - sensors = list("co2_sensor" = "Tank") + sensors = list("co2_sensor"="Tank") }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/borderfloor{ @@ -30386,6 +30489,7 @@ icon_state = "1-2" }, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/as_emergency) "bSf" = ( @@ -31072,15 +31176,15 @@ /turf/simulated/floor/reinforced/carbon_dioxide, /area/engineering/atmos) "bUd" = ( -/obj/structure/table/marble, -/obj/item/device/flashlight/lamp, -/obj/item/weapon/reagent_containers/food/drinks/teapot, -/obj/machinery/camera/network/civilian{ - c_tag = "CIV - Coffee Shop"; +/obj/machinery/door/airlock/glass{ + name = "Central Access" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/seconddeck/fscenter) "bUe" = ( /obj/effect/floor_decal/corner/black/full{ dir = 4 @@ -31609,7 +31713,16 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 5 }, -/turf/simulated/floor/wood, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "bVT" = ( /obj/effect/floor_decal/steeldecal/steel_decals6{ @@ -31754,6 +31867,11 @@ c_tag = "CIV - Recreational Lounge"; dir = 4 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "bWz" = ( @@ -31762,20 +31880,9 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "bWA" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/effect/floor_decal/corner/yellow/diagonal, +/obj/structure/table/gamblingtable, +/obj/item/weapon/storage/pill_bottle/dice_nerd, /turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "bWB" = ( @@ -31829,15 +31936,16 @@ /turf/simulated/floor/tiled/dark, /area/lawoffice) "bWE" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/effect/floor_decal/corner/yellow/diagonal, +/obj/structure/table/gamblingtable, +/obj/item/weapon/deck/cah{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/deck/cah/black{ + pixel_x = -2; + pixel_y = -2 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "bWF" = ( @@ -31910,13 +32018,16 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "bWY" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/floor/carpet, -/area/crew_quarters/coffee_shop) +/obj/structure/sign/directions/chapel{ + dir = 5 + }, +/turf/simulated/wall, +/area/library) "bWZ" = ( -/obj/structure/table/gamblingtable, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, +/obj/structure/casino_table/roulette_table, +/obj/effect/floor_decal/carpet{ + dir = 4 + }, /turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "bXa" = ( @@ -31949,12 +32060,24 @@ /turf/simulated/floor/plating, /area/maintenance/chapel) "bXh" = ( -/obj/machinery/vending/wallmed1{ - name = "Emergency NanoMed"; - pixel_y = 28 +/obj/structure/table/marble, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/structure/sink/countertop{ + dir = 2; + pixel_y = 7 }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/item/trash/plate{ + pixel_y = -2 + }, +/obj/item/trash/plate, +/obj/item/trash/plate{ + pixel_y = 2 + }, +/obj/item/trash/plate{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "bXj" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/floor_decal/borderfloorblack{ @@ -31969,18 +32092,18 @@ /turf/simulated/wall, /area/lawoffice) "bXq" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /obj/effect/floor_decal/corner/yellow/diagonal, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "bXr" = ( @@ -32262,12 +32385,16 @@ /turf/simulated/floor/plating, /area/maintenance/bar) "bYh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/effect/floor_decal/spline/plain{ +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/library) "bYi" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -32286,10 +32413,19 @@ /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) "bYm" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/dice/d20, -/turf/simulated/floor/carpet, -/area/library) +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + layer = 3 + }, +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "bYq" = ( /obj/item/weapon/material/ashtray/glass, /obj/structure/disposalpipe/segment, @@ -32837,7 +32973,19 @@ /turf/simulated/floor/carpet/oracarpet, /area/crew_quarters/coffee_shop) "caL" = ( -/obj/structure/casino_table/roulette_table, +/obj/item/weapon/stool/padded, +/obj/effect/landmark/start{ + name = "Intern" + }, +/obj/effect/floor_decal/carpet{ + dir = 4 + }, +/obj/effect/floor_decal/carpet{ + dir = 1 + }, +/obj/effect/floor_decal/carpet{ + dir = 5 + }, /turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "caN" = ( @@ -33179,9 +33327,13 @@ /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) "cbJ" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/wood, -/area/crew_quarters/cafeteria) +/obj/machinery/door/airlock/glass{ + name = "Central Access" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/seconddeck/fpcenter) "cbN" = ( /obj/machinery/alarm{ dir = 4; @@ -33206,12 +33358,12 @@ /area/hallway/primary/seconddeck/aft) "cbP" = ( /obj/structure/sign/directions/cryo, -/obj/structure/sign/directions/gym{ - pixel_y = -10 +/obj/structure/sign/directions/recreation{ + dir = 5; + pixel_y = 9 }, /obj/structure/sign/directions/library{ - dir = 10; - pixel_y = 10 + pixel_y = -9 }, /turf/simulated/wall, /area/crew_quarters/coffee_shop) @@ -33366,34 +33518,37 @@ d2 = 8; icon_state = "4-8" }, -/obj/item/weapon/stool/padded, -/turf/simulated/floor/carpet, +/obj/effect/floor_decal/corner/yellow/diagonal, +/turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "cco" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, +/obj/effect/floor_decal/corner/yellow/diagonal, /obj/structure/cable/green{ - d1 = 1; + d1 = 4; d2 = 8; - icon_state = "1-8" + icon_state = "4-8" }, -/obj/item/weapon/stool/padded, -/turf/simulated/floor/carpet, -/area/crew_quarters/coffee_shop) -"ccq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/item/weapon/stool/padded, -/obj/effect/landmark/start{ - name = "Intern" - }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) +"ccq" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) "ccr" = ( /obj/structure/disposalpipe/segment, /obj/item/device/radio/intercom{ @@ -33632,6 +33787,14 @@ dir = 4 }, /obj/effect/floor_decal/corner/yellow/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "ccX" = ( @@ -34050,13 +34213,15 @@ /turf/simulated/floor/tiled/hydro, /area/hydroponics) "cdX" = ( -/obj/machinery/hologram/holopad, /obj/structure/cable/green{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/turf/simulated/floor/wood, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "cdY" = ( /obj/structure/cable/green{ @@ -34067,7 +34232,13 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 10 }, -/turf/simulated/floor/wood, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "cdZ" = ( /obj/structure/cable/green{ @@ -34168,11 +34339,6 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/barrestroom) -"cer" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/deck/cards, -/turf/simulated/floor/carpet, -/area/library) "cex" = ( /obj/structure/table/reinforced, /obj/item/weapon/reagent_containers/spray/luminol, @@ -34288,7 +34454,16 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/coffee_shop) "ceS" = ( -/obj/structure/table/gamblingtable, +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/carpet{ + dir = 8 + }, +/obj/effect/floor_decal/carpet{ + dir = 1 + }, +/obj/effect/floor_decal/carpet{ + dir = 9 + }, /turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "ceT" = ( @@ -34309,18 +34484,18 @@ /turf/simulated/floor/plating, /area/maintenance/bar) "cfb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "cfd" = ( @@ -34337,7 +34512,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/wood, +/obj/effect/floor_decal/steeldecal/steel_decals_central6, +/turf/simulated/floor/tiled/monotile, /area/crew_quarters/cafeteria) "cff" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -34349,7 +34525,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 5 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "cfg" = ( /obj/effect/floor_decal/industrial/warning/corner, @@ -34772,7 +34948,6 @@ /turf/simulated/floor/reinforced/n20, /area/engineering/atmos) "cgd" = ( -/obj/machinery/portable_atmospherics/hydroponics, /obj/effect/floor_decal/borderfloor/corner{ dir = 8 }, @@ -34819,25 +34994,22 @@ "cgk" = ( /obj/effect/floor_decal/borderfloor/corner, /obj/effect/floor_decal/corner/lime/bordercorner, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/structure/closet/secure_closet/hydroponics, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Library Starboard"; + dir = 8 + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "cgn" = ( /obj/effect/floor_decal/steeldecal/steel_decals6, -/turf/simulated/floor/wood, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "cgo" = ( /obj/structure/closet/emcloset, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/wood, +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/green/bordercorner, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "cgq" = ( /obj/structure/extinguisher_cabinet{ @@ -35129,29 +35301,48 @@ /turf/simulated/floor/tiled/dark, /area/ai_monitored/storage/eva) "chp" = ( -/obj/machinery/vending/hydronutrients, +/obj/machinery/portable_atmospherics/hydroponics, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "chq" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "chs" = ( /obj/machinery/door/airlock/multi_tile/glass{ - name = "Library" + name = "Gallery" }, /obj/machinery/door/firedoor/multi_tile/glass{ dir = 8 }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, /turf/simulated/floor/tiled/steel_grid, -/area/library) +/area/crew_quarters/seconddeck/artgallery) "cht" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0; + dir = 2 + }, /turf/simulated/floor/tiled/steel_grid, -/area/library) +/area/crew_quarters/seconddeck/artgallery) "chy" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -35309,7 +35500,15 @@ /area/crew_quarters/cafeteria) "chX" = ( /obj/structure/table/woodentable, -/obj/item/weapon/deck/cards, +/obj/item/device/radio/subspace{ + desc = "A heavy duty radio that can pick up all manor of shortwave and subspace frequencies. It's a bit bulkier than a normal radio thanks to the extra hardware. An engraving on the frame reads: IF FOUND, RETURN TO THE BAR!"; + name = "Bar subspace radio"; + pixel_y = 5 + }, +/obj/item/weapon/deck/cards{ + pixel_x = -5; + pixel_y = -2 + }, /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) "chY" = ( @@ -35385,100 +35584,70 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 1 }, -/turf/simulated/floor/wood, -/area/library) +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "cim" = ( /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 4 }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "cin" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 +/obj/machinery/button/windowtint{ + id = "Gallery"; + pixel_x = 10; + pixel_y = 24; + range = 12 }, -/turf/simulated/floor/wood, -/area/library) -"cip" = ( -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 21 - }, -/obj/machinery/newscaster{ - pixel_y = 30 - }, -/obj/machinery/libraryscanner, -/turf/simulated/floor/wood, -/area/library) -"cir" = ( -/obj/structure/bookcase{ - name = "Forbidden Knowledge" - }, -/obj/machinery/firealarm{ - layer = 3.3; +/obj/machinery/light_switch{ + pixel_x = -11; pixel_y = 26 }, -/turf/simulated/floor/carpet, -/area/library) +/obj/machinery/alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) +"cip" = ( +/obj/structure/easel, +/obj/item/canvas/twentyfour_twentyfour, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/artgallery) +"cir" = ( +/obj/structure/easel, +/obj/item/canvas/twentythree_twentythree, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/status_display{ + layer = 4; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/artgallery) "cis" = ( -/obj/machinery/camera/network/civilian{ - c_tag = "CIV - Library Office" +/obj/machinery/disposal, +/obj/effect/floor_decal/borderfloor{ + dir = 4 }, -/obj/machinery/newscaster{ - pixel_x = 30 +/obj/effect/floor_decal/corner/green/border{ + dir = 4 }, -/obj/item/device/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 21 - }, -/obj/machinery/button/windowtint{ - id = "library_window_tint"; - pixel_x = -14; - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/closet/secure_closet{ - anchored = 1; - desc = "It's an immobile card-locked storage unit. A note on the door reads: It's dangerous to go alone. This should help a little bit."; - name = "Press Locker"; - req_one_access = list(21,37) - }, -/obj/item/clothing/shoes/boots/combat{ - desc = "A pair of steel-toed synthleather boots. The tag indicates this pair belongs to the Librarian."; - name = "press combat boots" - }, -/obj/item/clothing/shoes/boots/combat{ - desc = "A pair of steel-toed synthleather boots. The tag indicates this pair belongs to the Librarian."; - name = "press combat boots" - }, -/obj/item/clothing/under/suit_jacket/navy/skirt, -/obj/item/clothing/under/suit_jacket/navy, -/obj/item/clothing/gloves/swat{ - desc = "These tactical gloves are somewhat fire and impact-resistant. The tag within indicates that this pair belongs to the Librarian."; - name = "press gloves" - }, -/obj/item/clothing/gloves/swat{ - desc = "These tactical gloves are somewhat fire and impact-resistant. The tag within indicates that this pair belongs to the Librarian."; - name = "press gloves" - }, -/obj/item/clothing/suit/storage/vest/press, -/obj/item/clothing/suit/storage/vest/press, -/obj/item/clothing/head/helmet{ - desc = "Standard issue gear for frontline press. Protects the head from impacts."; - name = "press helmet" - }, -/obj/item/clothing/head/helmet{ - desc = "Standard issue gear for frontline press. Protects the head from impacts."; - name = "press helmet" - }, -/obj/item/clothing/accessory/armor/helmcover/navy, -/obj/item/clothing/accessory/armor/helmcover/navy, -/turf/simulated/floor/carpet, -/area/library) +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "ciu" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 9 @@ -35503,14 +35672,8 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) "cix" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "ciy" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light{ @@ -35807,55 +35970,25 @@ }, /turf/simulated/floor/tiled, /area/hallway/secondary/eva_hallway) -"cjd" = ( -/obj/structure/noticeboard{ - pixel_x = -32 - }, -/turf/simulated/floor/wood, -/area/library) "cjg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/artgallery) +"cjh" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 }, /turf/simulated/floor/wood, -/area/library) -"cjh" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Library Office"; - req_access = list(37) - }, -/turf/simulated/floor/tiled/steel_grid, -/area/library) +/area/crew_quarters/seconddeck/artgallery) "cji" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 22 - }, -/obj/structure/bed/chair/comfy/brown, -/obj/effect/landmark/start{ - name = "Librarian" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/light{ +/obj/effect/floor_decal/borderfloor{ dir = 4 }, -/turf/simulated/floor/carpet, -/area/library) +/obj/effect/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "cjp" = ( /obj/structure/table/woodentable, /turf/simulated/floor/carpet, @@ -35933,15 +36066,14 @@ /turf/simulated/floor/airless, /area/hallway/secondary/eva_hallway) "cjv" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - external_pressure_bound = 140; - external_pressure_bound_default = 140; - icon_state = "map_vent_out"; - use_power = 1 +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /obj/machinery/shield_diffuser, /turf/simulated/floor/airless, -/area/maintenance/research) +/area/space) "cjw" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 @@ -36050,8 +36182,14 @@ /turf/simulated/floor, /area/maintenance/substation/atmospherics) "cjH" = ( -/obj/machinery/status_display, -/turf/simulated/wall, +/obj/effect/floor_decal/borderfloor{ + dir = 10 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 10 + }, +/obj/machinery/biogenerator, +/turf/simulated/floor/tiled/hydro, /area/hydroponics) "cjL" = ( /turf/simulated/floor/tiled/hydro, @@ -36127,43 +36265,22 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/civilian) -"cjX" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) -"cka" = ( -/obj/machinery/biogenerator, -/turf/simulated/floor/tiled/hydro, -/area/hydroponics) "ckd" = ( -/obj/structure/bed/chair/office/dark{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/carpet, -/area/library) +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "ckf" = ( -/obj/machinery/door/window/southright{ - name = "Library Desk Door"; - req_access = list(37) - }, -/obj/machinery/camera/network/civilian{ - c_tag = "CIV - Library Starboard"; +/obj/structure/sign/painting/public, +/turf/simulated/wall/wood, +/area/crew_quarters/seconddeck/artgallery) +"ckg" = ( +/obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood, -/area/library) -"ckg" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/dice, -/turf/simulated/floor/carpet, -/area/library) +/area/crew_quarters/seconddeck/artgallery) "ckj" = ( /turf/simulated/wall, /area/hallway/primary/seconddeck/aft) @@ -36214,57 +36331,57 @@ /turf/simulated/floor/plating, /area/maintenance/bar) "ckr" = ( -/obj/structure/table/marble, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/effect/floor_decal/borderfloor{ + dir = 6 }, -/obj/item/weapon/storage/box/glasses/coffeecup, -/obj/item/weapon/storage/box/glasses/coffeemug, -/obj/item/weapon/storage/box/glasses/square, -/obj/item/weapon/storage/box/buns, -/obj/item/weapon/storage/box/donut, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 +/obj/effect/floor_decal/corner/lime/border{ + dir = 6 }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/machinery/honey_extractor, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "cks" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, +/area/hydroponics) "ckt" = ( -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) -"cku" = ( -/obj/effect/floor_decal/spline/plain{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/noticeboard{ - pixel_y = 27 - }, -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 4; - id = "coffeeshop"; - layer = 3.1; - name = "Cafe Shutters" - }, -/turf/simulated/floor/tiled/old_cargo/yellow, -/area/library) +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/fscenter) "ckv" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/floor/wood, -/area/library) +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/machinery/light{ + layer = 3 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "cky" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood, -/area/library) +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fpcenter) "ckB" = ( /turf/simulated/wall, /area/maintenance/substation/atmospherics) @@ -36298,9 +36415,17 @@ /turf/simulated/floor/plating, /area/maintenance/bar) "ckO" = ( -/obj/structure/bed/chair/comfy/black, -/turf/simulated/floor/carpet/oracarpet, -/area/library) +/obj/structure/bed/chair/sofa/brown{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = -32 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/artgallery) "ckP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -36317,15 +36442,16 @@ /turf/simulated/floor, /area/maintenance/engineering) "ckQ" = ( +/obj/effect/floor_decal/carpet{ + dir = 8 + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "ckR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -36366,13 +36492,6 @@ }, /turf/simulated/floor/airless, /area/maintenance/security_port) -"cle" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) "clg" = ( /turf/simulated/wall, /area/crew_quarters/bar) @@ -36388,10 +36507,29 @@ /turf/simulated/floor/plating, /area/maintenance/bar) "cli" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/wood, -/area/library) +/obj/structure/table/rack/shelf/steel, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/obj/item/canvas/twentythree_twentythree, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "clj" = ( /obj/structure/table/marble, /obj/effect/floor_decal/corner/grey/diagonal{ @@ -36406,46 +36544,29 @@ /obj/item/weapon/reagent_containers/food/condiment/small/sugar, /turf/simulated/floor/tiled/white, /area/crew_quarters/cafeteria) -"clk" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/effect/landmark{ - name = "lightsout" +"clm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) +"cln" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) +"clr" = ( /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/carpet/oracarpet, -/area/library) -"clm" = ( -/obj/structure/table/bench/wooden, -/obj/structure/flora/pottedplant/small{ - pixel_y = 9 +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/green/bordercorner, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 }, -/turf/simulated/floor/carpet/oracarpet, -/area/library) -"cln" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/wood, -/area/library) -"clo" = ( -/turf/simulated/floor/carpet, -/area/library) -"clq" = ( -/obj/structure/bed/chair/office/dark, -/turf/simulated/floor/carpet, -/area/library) -"clr" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/carpet, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "clt" = ( /obj/effect/floor_decal/chapel{ dir = 8 @@ -36499,25 +36620,35 @@ /turf/simulated/floor/plating, /area/maintenance/bar) "clJ" = ( -/obj/structure/bookcase{ - name = "bookcase (Fiction)" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/carpet/oracarpet, -/area/library) -"clK" = ( -/obj/structure/bed/chair/comfy/black{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/carpet/oracarpet, -/area/library) +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "clL" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, /obj/structure/cable/green{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 8; + icon_state = "1-8" }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "clO" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/door/airlock/glass_external{ @@ -36531,12 +36662,11 @@ /turf/simulated/floor/tiled/dark, /area/maintenance/security_port) "clQ" = ( -/obj/machinery/door/firedoor/border_only, -/obj/effect/wingrille_spawn/reinforced/polarized{ - id = "tabletop_window_tint" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "clT" = ( /obj/structure/cable/green{ d1 = 1; @@ -36580,92 +36710,92 @@ /obj/machinery/door/airlock/multi_tile/glass{ name = "Chapel" }, +/obj/structure/curtain/bed, /turf/simulated/floor/tiled/techmaint, /area/chapel/main) "clZ" = ( +/obj/structure/curtain/bed, /turf/simulated/floor/tiled/techmaint, /area/chapel/main) "cma" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - req_one_access = list(25,28) - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plating, -/area/library) +/area/maintenance/bar) "cmc" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/bar) "cme" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/table/woodentable, +/obj/machinery/light{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/item/clothing/suit/storage/apron/white{ + pixel_y = 7; + pixel_x = -6 }, -/obj/effect/floor_decal/spline/plain{ - dir = 4 +/obj/item/clothing/suit/storage/apron/white{ + pixel_y = 7; + pixel_x = 7 }, -/obj/machinery/door/window/southright{ - dir = 4; - name = "Coffee Shop"; - req_one_access = list(25,28) +/obj/item/clothing/suit/storage/apron/white{ + pixel_y = 6 }, -/obj/machinery/door/blast/shutters{ - dir = 4; - id = "coffeeshop"; - layer = 3.1; - name = "Cafe Shutters" +/obj/item/clothing/glasses/regular/hipster{ + pixel_y = -2; + pixel_x = 4 }, -/turf/simulated/floor/tiled/old_cargo/yellow, -/area/library) -"cmf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/item/clothing/mask/smokable/pipe/cobpipe{ + pixel_y = 3; + pixel_x = -4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/item/clothing/head/beret{ + pixel_x = 5; + pixel_y = 11 }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "cmg" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 6 }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "cmh" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/wood, -/area/library) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/seconddeck/artsupplies) "cmj" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/airlock/command{ @@ -36687,19 +36817,13 @@ /turf/simulated/floor/tiled/steel_grid, /area/ai_monitored/storage/eva) "cmk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/library) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/floor_decal/steeldecal/steel_decals_central6, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/seconddeck/artsupplies) "cml" = ( /obj/structure/cable{ d1 = 2; @@ -36750,11 +36874,15 @@ /turf/simulated/floor/tiled, /area/ai_monitored/storage/eva) "cmp" = ( -/obj/structure/bed/chair/office/dark{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/carpet, -/area/library) +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Art Storage"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "cms" = ( /obj/structure/cable/green{ d1 = 4; @@ -36795,15 +36923,16 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) "cmx" = ( -/obj/effect/floor_decal/corner/brown/diagonal, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 5 }, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/structure/table/marble, +/obj/item/device/daredevice, +/turf/simulated/floor/plating, +/area/maintenance/bar) "cmA" = ( /obj/structure/cable{ d1 = 4; @@ -36817,35 +36946,51 @@ /turf/simulated/floor/tiled, /area/ai_monitored/storage/eva) "cmB" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/maintenance/bar) "cmC" = ( -/obj/machinery/bookbinder, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 }, -/turf/simulated/floor/wood, -/area/library) +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "cmD" = ( -/obj/machinery/papershredder, -/turf/simulated/floor/wood, -/area/library) +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/green/border, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -20 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "cmE" = ( -/obj/structure/filingcabinet, -/turf/simulated/floor/wood, -/area/library) +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Gallery Bow"; + dir = 10 + }, +/obj/machinery/newscaster{ + pixel_y = -30 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "cmF" = ( /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 @@ -36861,6 +37006,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 6 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) "cmO" = ( @@ -36871,51 +37017,84 @@ /turf/simulated/floor/airless, /area/shuttle/cryo/station) "cmP" = ( -/turf/simulated/wall, -/area/hallway/secondary/docking_hallway2) +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "cmQ" = ( -/obj/machinery/door/airlock{ - name = "Coffee Shop"; - req_one_access = list(25,28) +/obj/structure/table/rack/shelf/steel, +/obj/effect/floor_decal/borderfloor{ + dir = 9 }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_grid, -/area/library) +/obj/effect/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/item/canvas/nineteen_nineteen{ + pixel_y = 3 + }, +/obj/item/canvas/nineteen_nineteen{ + pixel_y = 3 + }, +/obj/item/canvas/nineteen_nineteen{ + pixel_y = 3 + }, +/obj/item/canvas/nineteen_nineteen{ + pixel_y = 3 + }, +/obj/item/canvas/nineteen_nineteen{ + pixel_y = 3 + }, +/obj/item/canvas/nineteen_nineteen{ + pixel_y = 3 + }, +/obj/item/canvas/nineteen_nineteen{ + pixel_y = 3 + }, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/item/canvas/twentythree_nineteen, +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "cmT" = ( -/obj/machinery/door/firedoor/border_only, -/obj/effect/wingrille_spawn/reinforced, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/library) -"cmV" = ( -/obj/structure/sign/directions/library{ - dir = 1 +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass{ + name = "Art Supplies" }, -/turf/simulated/wall, -/area/library) +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/seconddeck/artsupplies) "cna" = ( /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, /obj/machinery/door/firedoor/multi_tile/glass{ dir = 1 }, /obj/machinery/door/airlock/multi_tile/glass{ dir = 1; - name = "Library" + name = "Gallery" + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0; + dir = 2 }, /turf/simulated/floor/tiled/steel_grid, -/area/library) +/area/crew_quarters/seconddeck/artgallery) "cnb" = ( /obj/structure/cable{ d1 = 4; @@ -36938,51 +37117,115 @@ }, /turf/simulated/floor/plating, /area/maintenance/bar) +"cnd" = ( +/obj/item/stack/rods, +/obj/structure/lattice, +/turf/space, +/area/space) "cnf" = ( /obj/machinery/door/firedoor/border_only, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/borderfloor/corner, -/obj/effect/floor_decal/corner/green/bordercorner, -/turf/simulated/floor/tiled/steel_grid, -/area/hallway/primary/seconddeck/aft) -"cnm" = ( -/obj/machinery/door/firedoor/multi_tile/glass, -/obj/machinery/door/airlock/multi_tile/glass{ - name = "Gym" +/obj/effect/wingrille_spawn/reinforced/polarized{ + id = "tabletop_window_tint" }, -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/seconddeck/gym) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/library) +"cnm" = ( +/obj/structure/bed/chair/comfy/black, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "cnq" = ( -/obj/item/clothing/gloves/rainbow, -/obj/item/clothing/head/soft/rainbow, -/obj/item/clothing/shoes/rainbow, -/obj/item/clothing/under/color/rainbow, -/obj/item/weapon/bedsheet/rainbow, -/obj/item/weapon/pen/crayon/rainbow, -/obj/item/clothing/glasses/threedglasses, -/turf/simulated/floor, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/woodentable, +/obj/structure/noticeboard{ + pixel_y = 27 + }, +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 21 + }, +/obj/item/weapon/paper_bin{ + pixel_x = 7; + pixel_y = 8 + }, +/obj/item/weapon/tape_roll, +/obj/item/weapon/pen/fountain5, +/obj/item/weapon/pen/fountain6{ + pixel_y = 7 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "cns" = ( -/obj/item/clothing/head/soft/mime, -/obj/item/clothing/mask/gas/mime, -/obj/item/clothing/shoes/mime, -/obj/item/clothing/under/mime, -/obj/structure/closet/crate, -/turf/simulated/floor/plating, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk, +/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk, +/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk, +/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk, +/obj/item/weapon/reagent_containers/food/drinks/smallmilk, +/obj/item/weapon/reagent_containers/food/drinks/smallmilk, +/obj/item/weapon/reagent_containers/food/drinks/smallmilk, +/obj/item/weapon/reagent_containers/food/drinks/smallmilk, +/obj/structure/closet/secure_closet/freezer/fridge{ + pixel_y = 0; + pixel_x = 6 + }, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/machinery/status_display{ + layer = 4; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "cnt" = ( -/obj/structure/bed/padded, -/obj/item/weapon/bedsheet/mime, -/turf/simulated/floor/plating, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/vending/dinnerware, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "cny" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/borderfloor/corner{ - dir = 4 +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/effect/floor_decal/corner/green/bordercorner{ +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 4 }, /turf/simulated/floor/tiled, @@ -37010,9 +37253,6 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 9 }, -/obj/machinery/firealarm{ - pixel_y = 24 - }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) "cnF" = ( @@ -37043,89 +37283,72 @@ /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) "cnL" = ( -/obj/structure/table/standard, -/obj/structure/flora/pottedplant/subterranean{ - name = "Scrumbus"; - pixel_y = 11 +/obj/effect/floor_decal/carpet{ + dir = 8 }, -/obj/effect/floor_decal/borderfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) -"cnM" = ( -/obj/structure/table/standard, -/obj/structure/bedsheetbin, -/obj/effect/floor_decal/borderfloor{ +/obj/effect/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 +/obj/effect/floor_decal/carpet{ + dir = 9; + pixel_y = 0 }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 +/obj/machinery/button/windowtint{ + id = "tabletop_window_tint"; + pixel_x = 12; + pixel_y = 25 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) -"cnN" = ( -/obj/machinery/washing_machine, -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/floor_decal/borderfloor/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/bordercorner{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) -"cnP" = ( -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) -"cnR" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/obj/machinery/power/apc{ +/obj/item/device/radio/intercom{ dir = 1; - name = "north bump"; - pixel_y = 24 + name = "Station Intercom (General)"; + pixel_y = 21 }, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 24 +/turf/simulated/floor/carpet, +/area/library) +"cnM" = ( +/obj/structure/bed/chair/office/dark, +/obj/effect/floor_decal/carpet{ + dir = 1 }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" +/turf/simulated/floor/carpet, +/area/library) +"cnN" = ( +/obj/machinery/door/firedoor/border_only, +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/plating, +/area/library) +"cnP" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 }, -/obj/item/weapon/storage/firstaid/regular{ - pixel_x = 5; - pixel_y = 5 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 2; + name = "Library"; + sortType = "Library" }, -/obj/item/weapon/storage/box/cups, /turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/area/library) +"cnR" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/bookbinder, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/machinery/firealarm{ + layer = 3.3; + pixel_y = 26 + }, +/turf/simulated/floor/tiled, +/area/library) "cod" = ( /obj/structure/bed/chair/wood{ dir = 1 @@ -37167,138 +37390,205 @@ /turf/simulated/floor/carpet/oracarpet, /area/crew_quarters/coffee_shop) "cok" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/machinery/status_display{ + pixel_y = -32 }, -/obj/effect/floor_decal/borderfloor{ +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/green/border{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/aft) +/turf/simulated/floor/carpet/bcarpet, +/area/library) "col" = ( -/obj/machinery/door/firedoor/glass, -/obj/effect/wingrille_spawn/reinforced, +/obj/machinery/door/firedoor/border_only, +/obj/effect/wingrille_spawn/reinforced/polarized{ + id = "tabletop_window_tint" + }, /turf/simulated/floor/plating, -/area/crew_quarters/seconddeck/gym) +/area/library) "com" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/effect/floor_decal/borderfloor{ +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/effect/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/corner/green/border{ - dir = 8 +/turf/simulated/floor/carpet, +/area/library) +"con" = ( +/obj/effect/floor_decal/carpet{ + dir = 1 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/effect/floor_decal/carpet{ + dir = 4 + }, +/obj/effect/floor_decal/carpet{ dir = 5 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) -"con" = ( -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/turf/simulated/floor/carpet, +/area/library) +"cos" = ( +/obj/effect/floor_decal/carpet, +/obj/effect/floor_decal/carpet{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) -"cos" = ( -/obj/structure/fitness/weightlifter, -/obj/effect/floor_decal/spline/plain{ - dir = 8 +/obj/effect/floor_decal/carpet{ + dir = 6 }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/library) "cot" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/newscaster{ - pixel_y = 30 - }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/dice, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet, +/area/library) "cou" = ( -/obj/machinery/fitness/heavy/lifter, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/stool/padded, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "cow" = ( +/obj/structure/table/gamblingtable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/obj/effect/floor_decal/carpet{ + dir = 4 + }, +/obj/effect/floor_decal/carpet, +/obj/effect/floor_decal/carpet{ + dir = 6 + }, /turf/simulated/floor/carpet, /area/crew_quarters/coffee_shop) "cox" = ( -/obj/machinery/light{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "coy" = ( -/obj/structure/fitness/punchingbag, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/marble, +/obj/item/weapon/hand_labeler{ + pixel_y = 8; + pixel_x = -7 + }, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_y = 2; + pixel_x = 10 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 28 + }, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_y = -2; + pixel_x = -5 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "coJ" = ( /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) "coN" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/structure/table/marble, +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/effect/floor_decal/corner/green/border{ +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/weapon/storage/box/donkpockets{ + pixel_y = -3; + pixel_x = 7 + }, +/obj/item/weapon/storage/box/donkpockets{ + pixel_y = -3; + pixel_x = -7 + }, +/obj/item/weapon/storage/box/donut{ + pixel_x = 3; + pixel_y = 11 + }, +/obj/effect/floor_decal/borderfloorblack{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/effect/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/item/device/radio/intercom{ dir = 4; - pixel_x = 24 + name = "Station Intercom (General)"; + pixel_x = 21 }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/aft) +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "coR" = ( -/turf/simulated/floor/boxing{ - name = "yoga mat" +/obj/structure/bed/chair/sofa/brown{ + layer = 2.9 }, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/window/basic{ + dir = 1 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "coT" = ( -/obj/structure/reagent_dispensers/water_cooler/full, -/obj/machinery/alarm{ - pixel_y = 22 - }, +/obj/effect/floor_decal/spline/fancy/wood, /obj/effect/floor_decal/borderfloor{ dir = 1 }, +/obj/machinery/photocopier, +/obj/machinery/light{ + dir = 1 + }, /obj/effect/floor_decal/corner/green/border{ dir = 1 }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, /turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/area/library) "coU" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 8 +/obj/structure/bed/chair/sofa/corner/brown{ + layer = 2.9 }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/structure/window/basic{ + dir = 1 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "coZ" = ( -/obj/structure/table/standard, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random{ - pixel_y = 4 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "cpd" = ( /obj/machinery/door/airlock/glass{ name = "Central Access" @@ -37323,12 +37613,15 @@ /turf/simulated/floor/tiled, /area/ai_monitored/storage/eva) "cpi" = ( -/obj/structure/fitness/weightlifter, -/obj/effect/floor_decal/spline/plain{ - dir = 10 +/obj/structure/bed/chair/sofa/left/brown{ + dir = 8; + layer = 2.9 }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "cpj" = ( /obj/machinery/door/airlock/glass_command{ name = "E.V.A."; @@ -37354,28 +37647,44 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/corner/brown/diagonal, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 6 }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/turf/simulated/floor/plating, +/area/maintenance/bar) "cpm" = ( +/obj/structure/closet/crate/hydroponics{ + desc = "All you need to start your own honey farm."; + name = "beekeeping crate" + }, +/obj/item/beehive_assembly, +/obj/item/bee_smoker, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/bee_pack, +/obj/item/weapon/tool/crowbar, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lime/border, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "cpw" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 @@ -37404,10 +37713,6 @@ /turf/simulated/floor/tiled/dark, /area/hallway/primary/seconddeck/fore) "cpB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -37418,6 +37723,9 @@ /obj/item/device/starcaster_news{ pixel_x = 8 }, +/obj/machinery/newscaster{ + pixel_x = 30 + }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/seconddeck/aft) "cpM" = ( @@ -37741,9 +38049,14 @@ /turf/simulated/floor/airless, /area/maintenance/research) "cqO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/red, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + external_pressure_bound = 140; + external_pressure_bound_default = 140; + icon_state = "map_vent_out"; + use_power = 1 + }, /turf/simulated/floor/airless, -/area/space) +/area/maintenance/research) "cqQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 @@ -38404,12 +38717,12 @@ /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, /obj/machinery/status_display{ pixel_y = 32 }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) "cta" = ( @@ -38623,6 +38936,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/bar) "ctN" = ( @@ -39323,6 +39637,7 @@ /turf/simulated/floor/airless, /area/rnd/toxins_launch) "cvM" = ( +/obj/machinery/shield_diffuser, /turf/simulated/floor/airless, /area/rnd/toxins_launch) "cvN" = ( @@ -41790,11 +42105,6 @@ }, /turf/simulated/floor/airless, /area/rnd/toxins_launch) -"cDi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) "cDk" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/light{ @@ -41906,6 +42216,9 @@ /obj/structure/sign/warning/airlock{ pixel_y = 32 }, +/obj/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/rnd/toxins_launch) "cDu" = ( @@ -42552,19 +42865,10 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/structure/closet/secure_closet/hydroponics, /obj/item/device/multitool, /turf/simulated/floor/tiled/hydro, /area/hydroponics) -"cFc" = ( -/obj/structure/sign/directions/library, -/turf/simulated/wall, -/area/library) "cFi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -43188,13 +43492,8 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/storage) "cIl" = ( -/obj/item/weapon/stool/padded, -/obj/effect/landmark/start{ - name = "Barista" - }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/turf/simulated/floor/grass, +/area/hydroponics) "cIn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -43264,10 +43563,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/storage) -"cKg" = ( -/obj/machinery/seed_extractor, -/turf/simulated/floor/tiled/hydro, -/area/hydroponics) "cKs" = ( /obj/machinery/disposal/deliveryChute{ dir = 1 @@ -43285,11 +43580,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/storage) -"cLh" = ( -/obj/structure/table/woodentable, -/obj/machinery/recharger, -/turf/simulated/floor/wood, -/area/library) "cMi" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -43397,23 +43687,24 @@ /turf/simulated/floor/tiled/white, /area/rnd/mixing) "cQM" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/obj/item/weapon/material/twohanded/spear/foam, -/obj/item/weapon/material/twohanded/fireaxe/foam, -/obj/item/weapon/material/sword/foam, -/obj/structure/table/rack/shelf, -/obj/item/weapon/material/twohanded/baseballbat/foam, -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Coffee Shop"; + req_one_access = list(25,28) + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "cRd" = ( /obj/machinery/door/firedoor/border_only, /obj/effect/wingrille_spawn/reinforced, @@ -43581,8 +43872,17 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 10 }, -/turf/simulated/floor/wood, -/area/library) +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "cVH" = ( /obj/machinery/chem_master, /obj/effect/floor_decal/borderfloorwhite{ @@ -43614,13 +43914,14 @@ /turf/simulated/floor/tiled/white, /area/medical/ward) "cWj" = ( -/obj/structure/table/woodentable, -/obj/item/device/camera_film, -/obj/item/device/camera_film, -/obj/item/device/paicard, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/wood, -/area/library) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "cWk" = ( /obj/machinery/atmospherics/portables_connector, /obj/effect/floor_decal/industrial/outline/yellow, @@ -43656,37 +43957,19 @@ /turf/simulated/floor/tiled/freezer, /area/medical/medical_restroom) "cXB" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/under/pants/yogapants, -/obj/item/clothing/under/pants/yogapants, -/obj/item/clothing/under/pants/yogapants, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, /obj/effect/floor_decal/borderfloor/corner{ dir = 4 }, +/obj/machinery/disposal, +/obj/effect/floor_decal/spline/fancy/wood, /obj/effect/floor_decal/corner/green/bordercorner{ dir = 4 }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 +/obj/structure/disposalpipe/trunk{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/area/library) "cXZ" = ( /turf/simulated/wall/r_wall, /area/rnd/mixing) @@ -43794,12 +44077,6 @@ /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor, /area/engineering/drone_fabrication) -"dcW" = ( -/obj/structure/bed/chair/sofa/right/brown{ - dir = 8 - }, -/turf/simulated/floor/carpet/oracarpet, -/area/library) "ddf" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/airlock/maintenance{ @@ -43892,10 +44169,14 @@ /turf/simulated/floor, /area/engineering/storage) "dhP" = ( -/obj/structure/table/woodentable, -/obj/item/device/communicator, +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/effect/floor_decal/carpet{ + dir = 4 + }, /turf/simulated/floor/carpet, -/area/crew_quarters/seconddeck/gym) +/area/library) "dhR" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -43916,13 +44197,20 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D1) "djr" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 5 +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/boxing{ - name = "yoga mat" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "dkb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -44022,26 +44310,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/sortjunction{ - dir = 8; - name = "Library"; - sortType = "Library" - }, /obj/machinery/camera/network/second_deck{ c_tag = "Second Deck - Civilian Hallway 1"; dir = 1 }, /obj/effect/floor_decal/borderfloor/corner, /obj/effect/floor_decal/corner/green/bordercorner, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/structure/cable/green{ - d1 = 1; + d1 = 4; d2 = 8; - icon_state = "1-8" + icon_state = "4-8" }, /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) @@ -44071,6 +44352,19 @@ /obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor/plating, /area/medical/foyer) +"dpN" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "dpO" = ( /turf/simulated/wall, /area/hallway/primary/seconddeck/fscenter) @@ -44254,6 +44548,20 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/research) +"dvr" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/bar) "dvz" = ( /obj/structure/cable{ d1 = 4; @@ -44480,12 +44788,15 @@ /turf/simulated/floor/wood, /area/rnd/research) "dzX" = ( -/obj/structure/bed/chair/office/dark, -/obj/effect/landmark/start{ - name = "Librarian" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "dBF" = ( /obj/machinery/camera/network/second_deck{ c_tag = "Second Deck - Central Ring 7"; @@ -44551,12 +44862,15 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "dEa" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/spline/plain, -/obj/machinery/recharger, -/obj/item/weapon/tool/wrench, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/effect/landmark/start{ + name = "Barista" + }, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "dEc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -44700,16 +45014,16 @@ /turf/simulated/floor/tiled/freezer, /area/rnd/research_restroom_sc) "dIu" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + dir = 1; + pixel_y = -10 }, -/obj/machinery/scale, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/brown/border, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "dIx" = ( /obj/machinery/shower{ dir = 8; @@ -44741,15 +45055,11 @@ /turf/simulated/floor/tiled/white, /area/rnd/research) "dJS" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "dKV" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -44807,21 +45117,36 @@ /turf/simulated/floor/tiled, /area/rnd/storage) "dMp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" }, -/obj/effect/floor_decal/steeldecal/steel_decals6, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) +"dMF" = ( +/obj/structure/table/marble, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/device/flashlight/lamp/green, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "coffeeshop"; + layer = 3.1; + name = "Cafe Shutters" + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "dNr" = ( -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 10 +/obj/structure/bookcase{ + name = "bookcase (Religious)" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/aft) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "dNI" = ( /obj/structure/bed/chair{ dir = 8 @@ -44884,21 +45209,16 @@ /turf/simulated/floor/tiled/dark, /area/hallway/secondary/entry/D2/arrivals) "dSc" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 24 +/obj/effect/floor_decal/carpet{ + dir = 4 }, /obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "dSt" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/closet/firecloset, @@ -44939,9 +45259,8 @@ /turf/simulated/floor/tiled, /area/medical/medbay2) "dTv" = ( -/obj/machinery/status_display, -/turf/simulated/wall, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/tiled/steel_grid, +/area/library) "dTG" = ( /obj/effect/floor_decal/borderfloorwhite{ dir = 1 @@ -44959,9 +45278,6 @@ /obj/effect/floor_decal/corner/lime/border{ dir = 1 }, -/obj/machinery/camera/network/civilian{ - c_tag = "CIV - Hydroponics" - }, /obj/item/device/radio/intercom{ dir = 1; name = "Station Intercom (General)"; @@ -45084,28 +45400,22 @@ /turf/simulated/floor/plating, /area/quartermaster/warehouse) "dWl" = ( -/obj/machinery/vending/fitness{ - dir = 8; - pixel_x = -5 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/borderfloor/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/bordercorner{ - dir = 1 - }, -/obj/machinery/light{ +/obj/effect/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 +/obj/effect/floor_decal/carpet, +/obj/effect/floor_decal/carpet{ + dir = 10 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Library Port"; + dir = 4 + }, +/turf/simulated/floor/carpet, +/area/library) "dWp" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -45208,8 +45518,7 @@ /obj/effect/floor_decal/industrial/warning/full, /obj/machinery/air_sensor{ frequency = 1445; - id_tag = "engine_exhaust_sensor"; - output = 2 + id_tag = "engine_exhaust_sensor" }, /turf/simulated/floor/airless, /area/engineering/engine_waste) @@ -45253,18 +45562,11 @@ /turf/simulated/floor/tiled/dark, /area/hallway/primary/seconddeck/dockhallway) "eaF" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 +/obj/structure/bookcase{ + name = "bookcase (Fiction)" }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "eaJ" = ( /obj/machinery/atmospherics/binary/pump, /turf/simulated/floor/tiled/white, @@ -45317,11 +45619,23 @@ /turf/simulated/floor/plating, /area/maintenance/medbay) "ebS" = ( -/obj/structure/bed/chair{ - dir = 8 +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/library) +"ecb" = ( +/obj/structure/bed/chair/sofa/left/brown{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 }, /turf/simulated/floor/carpet, -/area/crew_quarters/seconddeck/gym) +/area/crew_quarters/seconddeck/artgallery) "ecy" = ( /obj/effect/wingrille_spawn/reinforced_phoron, /obj/machinery/door/firedoor/glass, @@ -45455,13 +45769,15 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/secondary/entry/D2) "egG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "egH" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/door/airlock/glass_external{ @@ -45565,6 +45881,11 @@ /obj/structure/table/glass, /turf/simulated/floor/tiled/dark, /area/chapel/main) +"eke" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "ekk" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -45596,10 +45917,10 @@ /turf/simulated/floor, /area/engineering/engine_room) "eli" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/deck/cards, -/turf/simulated/floor/carpet, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/door/firedoor/border_only, +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "elC" = ( /obj/structure/cable/green{ d1 = 1; @@ -45736,6 +46057,18 @@ /obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor/plating, /area/hallway/secondary/entry/D3) +"eoK" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/purple/bordercorner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fscenter) "epn" = ( /obj/item/device/geiger/wall/west, /turf/simulated/floor, @@ -45802,34 +46135,19 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/seconddeck/fscenter) "erJ" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/effect/floor_decal/spline/plain{ +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/item/device/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -21 - }, -/obj/structure/table/standard, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 8 - }, -/obj/item/weapon/tape_roll{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/pen, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "esc" = ( /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, @@ -45911,6 +46229,9 @@ d2 = 0; icon_state = "16-0" }, +/obj/structure/disposalpipe/up{ + dir = 4 + }, /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/fs_emergency) "euY" = ( @@ -45925,6 +46246,9 @@ icon_state = "4-8" }, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/fs_emergency) "eva" = ( @@ -45948,6 +46272,9 @@ icon_state = "4-8" }, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/fs_emergency) "evM" = ( @@ -45965,10 +46292,11 @@ /turf/simulated/floor/tiled/steel_grid, /area/medical/patient_a) "evZ" = ( -/obj/machinery/door/firedoor/border_only, -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/carpet/oracarpet, -/area/library) +/obj/effect/landmark{ + name = "blobstart" + }, +/turf/simulated/floor/grass, +/area/hydroponics) "ewQ" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -45976,15 +46304,16 @@ /obj/effect/floor_decal/corner/lime/border{ dir = 4 }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 22 - }, +/obj/structure/table/standard, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/reagent_containers/glass/bucket, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "ewV" = ( @@ -45997,6 +46326,9 @@ /obj/machinery/door/airlock{ name = "Emergency Storage" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/fs_emergency) "exb" = ( @@ -46015,8 +46347,11 @@ d2 = 8; icon_state = "1-8" }, -/obj/structure/disposalpipe/segment, /obj/random/junk, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/research) "eyb" = ( @@ -46087,13 +46422,13 @@ /turf/simulated/floor/tiled/white, /area/medical/genetics) "eCc" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 6 +/obj/structure/table/bench/wooden, +/obj/item/device/flashlight/lamp/clown{ + pixel_y = 5 }, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "eCo" = ( /obj/structure/cable/green{ d2 = 4; @@ -46343,6 +46678,8 @@ "eHK" = ( /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "eHU" = ( @@ -46411,9 +46748,6 @@ /turf/simulated/floor/wood, /area/rnd/research) "eIM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -46537,20 +46871,20 @@ /turf/simulated/floor/tiled/white, /area/medical/medical_lockerroom) "eKZ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" }, -/obj/effect/floor_decal/borderfloor/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hallway/secondary/docking_hallway2) +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/seconddeck/artsupplies) "eLa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/wall, @@ -46615,8 +46949,10 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/wood, -/area/library) +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "eMc" = ( /obj/effect/floor_decal/industrial/warning{ dir = 10 @@ -46962,9 +47298,11 @@ /turf/simulated/floor/wood, /area/hallway/secondary/entry/docking_lounge) "eXg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/wood, -/area/library) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "eXp" = ( /obj/machinery/alarm{ dir = 4; @@ -47096,6 +47434,11 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 9 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/coffee_shop) "eZS" = ( @@ -47496,7 +47839,6 @@ dir = 4 }, /obj/effect/floor_decal/industrial/warning/corner, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/research) "flB" = ( @@ -47559,6 +47901,7 @@ /obj/effect/floor_decal/corner/green/bordercorner2{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) "fno" = ( @@ -47668,6 +48011,20 @@ /obj/effect/floor_decal/corner/yellow/border, /turf/simulated/floor/tiled, /area/storage/primary) +"fpc" = ( +/obj/structure/table/marble, +/obj/machinery/cash_register/civilian{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "coffeeshop"; + layer = 3.1; + name = "Cafe Shutters" + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "fpA" = ( /obj/machinery/door/firedoor/glass, /turf/simulated/floor/wood, @@ -47700,8 +48057,8 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 8 }, /turf/simulated/floor, /area/engineering/engine_room) @@ -47822,6 +48179,14 @@ /obj/structure/railing, /turf/simulated/open, /area/rnd/research) +"fvE" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/tape_roll, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/artgallery) "fvH" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/airlock{ @@ -47853,13 +48218,10 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D3) "fvS" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 9 - }, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/deck/cards, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet, +/area/library) "fwZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -47874,6 +48236,12 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, /turf/simulated/floor, /area/engineering/engine_room) "fxZ" = ( @@ -47940,31 +48308,9 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D1) "fyN" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 1 - }, -/obj/structure/closet/cabinet, -/obj/item/clothing/under/bathrobe, -/obj/item/clothing/under/bathrobe, -/obj/item/clothing/under/bathrobe, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals9{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals9{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/corner/brown/diagonal, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "fzk" = ( /obj/machinery/door/blast/regular{ density = 0; @@ -48050,6 +48396,10 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/mixing) +"fBa" = ( +/obj/machinery/smartfridge/produce, +/turf/simulated/wall, +/area/crew_quarters/coffee_shop) "fBz" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 @@ -48066,10 +48416,10 @@ /turf/simulated/wall/r_wall, /area/rnd/mixing) "fBN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "fBW" = ( @@ -48133,10 +48483,10 @@ /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/effect/floor_decal/corner/green/border{ +/obj/machinery/light{ dir = 1 }, -/obj/machinery/light{ +/obj/effect/floor_decal/corner/green/border{ dir = 1 }, /turf/simulated/floor/tiled, @@ -48242,10 +48592,14 @@ /turf/simulated/wall/r_wall, /area/rnd/mixing) "fGb" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/woodentable, +/obj/machinery/recharger, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Library Aft"; + dir = 1 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "fGl" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/door/airlock/glass_external{ @@ -48379,9 +48733,10 @@ output_level = 750000 }, /obj/structure/cable/orange{ - dir = 8 + d2 = 4; + icon_state = "0-4" }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/plating, /area/engineering/hallway/engineer_hallway) "fJl" = ( /obj/structure/cable/green{ @@ -48546,25 +48901,41 @@ /turf/simulated/floor/plating, /area/maintenance/medbay) "fOV" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/obj/structure/table/standard, -/obj/item/clothing/under/shorts/blue, -/obj/item/clothing/under/shorts/blue, -/obj/item/clothing/gloves/boxing/blue, -/obj/machinery/alarm{ +/obj/machinery/button/remote/blast_door{ + id = "coffeeshop"; + name = "Cafe Shutters"; + pixel_y = -26; dir = 1; - pixel_y = -22 + req_one_access = list(25,28) }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/button/neonsign{ + id = "cafeopen"; + name = "Cafe Sign Switch"; + pixel_x = 11; + pixel_y = -27 + }, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/effect/floor_decal/borderfloorblack/corner, +/obj/effect/floor_decal/corner/brown/bordercorner, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 9 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "fPb" = ( /obj/structure/bed/chair/comfy/black{ dir = 1 @@ -48591,46 +48962,9 @@ /turf/simulated/floor, /area/engineering/engine_room) "fPV" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8; - pixel_y = 8 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8; - pixel_y = -4 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8; - pixel_y = 12 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4; - pixel_y = 12 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/border{ - dir = 8 - }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, +/area/hydroponics) "fQL" = ( /obj/structure/sign/directions/cryo{ pixel_y = -10 @@ -48724,6 +49058,10 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) "fVj" = ( @@ -48755,7 +49093,6 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/research) "fVv" = ( @@ -48900,23 +49237,11 @@ /turf/simulated/wall, /area/medical/psych) "gar" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/vending/cola{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals9, -/obj/effect/floor_decal/steeldecal/steel_decals9{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "gaL" = ( /obj/structure/cable{ d1 = 1; @@ -49007,14 +49332,11 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/dockhallway) "gbW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black{ - dir = 1 +/obj/structure/bookcase{ + name = "Forbidden Knowledge" }, -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet, +/area/library) "gcc" = ( /obj/structure/table/glass, /obj/item/roller, @@ -49562,14 +49884,11 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/dockhallway) "gmm" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "gmp" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -49994,18 +50313,13 @@ /turf/simulated/floor/tiled/white, /area/medical/foyer) "gAK" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 32 - }, -/obj/machinery/light/small{ +/obj/structure/table/woodentable, +/obj/machinery/librarycomp, +/obj/machinery/light{ dir = 1 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet/bcarpet, +/area/library) "gAX" = ( /obj/machinery/atmospherics/tvalve/bypass{ dir = 8 @@ -50315,15 +50629,11 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D2) "gJR" = ( -/obj/machinery/door/firedoor/multi_tile/glass{ - dir = 1 +/obj/machinery/neonsign/cafe{ + id = "cafeopen" }, -/obj/machinery/door/airlock/multi_tile/glass{ - dir = 2; - name = "Gym" - }, -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/wall, +/area/library) "gJV" = ( /obj/structure/closet, /obj/item/weapon/lipstick/purple, @@ -50437,19 +50747,11 @@ /turf/simulated/floor/tiled/hydro, /area/hydroponics) "gMz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/seconddeck/artgallery) "gNb" = ( /obj/structure/bed/chair{ dir = 1 @@ -50468,13 +50770,10 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "gNI" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/dice/d20, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet, +/area/library) "gOj" = ( /obj/structure/cable/green{ d1 = 4; @@ -50617,8 +50916,16 @@ /turf/simulated/floor/plating, /area/maintenance/locker) "gQu" = ( -/obj/machinery/honey_extractor, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "gQv" = ( @@ -50910,12 +51217,15 @@ /turf/simulated/floor/tiled, /area/quartermaster/foyer) "gYm" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/effect/floor_decal/borderfloor{ + dir = 10 }, -/turf/simulated/floor/wood, -/area/library) +/obj/effect/floor_decal/corner/green/border{ + dir = 10 + }, +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "gZj" = ( /obj/machinery/alarm{ dir = 8; @@ -51013,13 +51323,20 @@ /turf/simulated/wall, /area/hallway/primary/seconddeck/fscenter) "haC" = ( -/obj/structure/table/woodentable, -/obj/machinery/librarycomp, -/obj/machinery/light{ - dir = 1 +/obj/structure/easel, +/obj/item/canvas/nineteen_nineteen{ + pixel_y = 10 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 1; + name = "Station Intercom (General)"; + pixel_y = 22 }, /turf/simulated/floor/wood, -/area/library) +/area/crew_quarters/seconddeck/artgallery) "haO" = ( /obj/structure/table/glass, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -51064,6 +51381,7 @@ icon_state = "1-2" }, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/as_emergency) "hdb" = ( @@ -51079,7 +51397,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "hdd" = ( /obj/structure/bed/chair{ @@ -51178,10 +51496,6 @@ d2 = 4; icon_state = "2-4" }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/random/trash, /turf/simulated/floor/plating, /area/maintenance/research) @@ -51219,10 +51533,6 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /turf/simulated/floor/plating, /area/maintenance/research) "hgv" = ( @@ -51244,6 +51554,29 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/research) +"hgO" = ( +/obj/structure/table/marble, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/window/southright{ + name = "Hydroponics"; + dir = 4 + }, +/obj/machinery/door/window/northleft{ + name = "Hydroponics"; + req_one_access = list(35,28); + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0; + dir = 2 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hydroponics) "hhw" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/techmaint, @@ -51267,6 +51600,15 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/office) +"hiu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "hiK" = ( /obj/structure/closet/wardrobe/chaplain_black, /turf/simulated/floor/lino, @@ -51337,9 +51679,6 @@ /turf/simulated/floor/tiled/white, /area/rnd/research) "hlo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -51347,16 +51686,15 @@ /area/hallway/primary/seconddeck/aft) "hlC" = ( /obj/machinery/atmospherics/unary/vent_pump/on, -/obj/item/device/radio/intercom/department/medbay{ - dir = 1; - pixel_y = 21 - }, /obj/effect/floor_decal/borderfloorwhite{ dir = 1 }, /obj/effect/floor_decal/corner/paleblue/border{ dir = 1 }, +/obj/machinery/atm{ + pixel_y = 30 + }, /turf/simulated/floor/tiled/white, /area/medical/medbay2) "hlN" = ( @@ -51402,17 +51740,11 @@ /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/ap_emergency) "hmH" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/green/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/structure/bookcase{ + name = "bookcase (Adult)" }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/structure/closet/athletic_mixed, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "hny" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -51461,12 +51793,25 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "hoK" = ( -/obj/structure/flora/pottedplant/flower{ - pixel_y = 10 +/obj/structure/window/reinforced{ + dir = 4; + health = 1e+006 }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/library) +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "hpn" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/atmospherics/pipe/manifold/hidden, @@ -51536,6 +51881,14 @@ /obj/effect/floor_decal/corner/purple/border, /turf/simulated/floor/tiled/white, /area/rnd/research) +"hrz" = ( +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) "hsI" = ( /obj/effect/shuttle_landmark{ base_area = /area/space; @@ -51649,13 +52002,15 @@ /turf/simulated/floor/wood, /area/hallway/secondary/entry/docking_lounge) "hwH" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 10 +/obj/structure/bed/chair/office/dark{ + dir = 1 }, -/turf/simulated/floor/boxing{ - name = "yoga mat" +/obj/effect/floor_decal/carpet, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet, +/area/library) "hwJ" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/border_only, @@ -51729,12 +52084,26 @@ /turf/simulated/floor/tiled/white, /area/medical/medbay2) "hzr" = ( -/obj/structure/table/bench/wooden, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = -24 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "hzE" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -51837,6 +52206,9 @@ /obj/machinery/ai_status_display{ pixel_x = -32 }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/medical/medical_lockerroom) "hCW" = ( @@ -52443,6 +52815,11 @@ }, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/green/border, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) "hPQ" = ( @@ -52650,11 +53027,13 @@ /turf/simulated/floor/tiled, /area/engineering/hallway/engineer_hallway) "hTu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 6 +/obj/structure/table/woodentable, +/obj/item/device/taperecorder, +/obj/effect/floor_decal/carpet/blue{ + dir = 8 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet/bcarpet, +/area/library) "hTx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -52885,7 +53264,6 @@ icon_state = "1-2" }, /obj/effect/floor_decal/industrial/warning, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/research) "hYU" = ( @@ -52922,9 +53300,8 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/secondary/entry/docking_lounge) "hZr" = ( -/obj/structure/bookcase/bookcart, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/wall, +/area/crew_quarters/seconddeck/artsupplies) "hZu" = ( /obj/effect/floor_decal/chapel, /turf/simulated/floor/tiled/dark, @@ -53216,6 +53593,12 @@ }, /turf/space, /area/space) +"iiA" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor, +/area/engineering/engine_room) "iiG" = ( /obj/structure/cable/green{ d1 = 4; @@ -53252,6 +53635,14 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/dockhallway) +"ijz" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + color = "#00ff00"; + dir = 4 + }, +/turf/simulated/floor, +/area/engineering/engine_room) "ijR" = ( /obj/structure/table/standard, /obj/item/weapon/storage/firstaid/toxin{ @@ -53272,16 +53663,8 @@ /turf/simulated/floor, /area/maintenance/bar) "ijW" = ( -/obj/structure/table/standard, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/material/knife/machete/hatchet, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/material/minihoe, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/reagent_containers/glass/bucket, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lime/border, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "ikD" = ( @@ -53300,6 +53683,16 @@ }, /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) +"ikG" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fpcenter) "ikX" = ( /obj/machinery/vending/fitness, /obj/machinery/light{ @@ -53319,6 +53712,7 @@ name = "Station Intercom (General)"; pixel_x = -21 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "ilr" = ( @@ -53396,18 +53790,9 @@ /turf/simulated/floor/wood, /area/hallway/secondary/entry/docking_lounge) "ipd" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 4; - id = "coffeeshop"; - layer = 3.1; - name = "Cafe Shutters" - }, -/turf/simulated/floor/tiled/old_cargo/yellow, -/area/library) +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/hydroponics) "ipq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -53545,6 +53930,13 @@ }, /turf/simulated/floor/reinforced/airless, /area/rnd/mixing) +"isR" = ( +/obj/machinery/door/firedoor/border_only, +/obj/effect/wingrille_spawn/reinforced/polarized{ + id = "Gallery" + }, +/turf/simulated/floor/plating, +/area/hydroponics) "itj" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 @@ -53783,6 +54175,10 @@ }, /turf/simulated/floor/tiled, /area/engineering/break_room) +"iBu" = ( +/obj/structure/sink/puddle, +/turf/simulated/floor/grass, +/area/hydroponics) "iCs" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/floor_decal/borderfloor{ @@ -53791,6 +54187,9 @@ /obj/effect/floor_decal/corner/green/border{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "iCy" = ( @@ -53800,6 +54199,9 @@ /obj/effect/floor_decal/corner/green/border{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "iCB" = ( @@ -53815,6 +54217,9 @@ dir = 10 }, /obj/effect/floor_decal/steeldecal/steel_decals4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "iDz" = ( @@ -53841,13 +54246,16 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/seconddeck/fscenter) "iEH" = ( -/obj/structure/disposalpipe/segment, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 6 }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "iES" = ( @@ -53906,15 +54314,13 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D2) "iHR" = ( -/obj/structure/sink/kitchen{ - pixel_y = 28 +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 }, -/obj/effect/landmark/start{ - name = "Barista" - }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/grass, +/area/hydroponics) "iIm" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/floor_decal/borderfloor{ @@ -53930,16 +54336,37 @@ /obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor/plating, /area/hallway/secondary/docking_hallway2) -"iJh" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ +"iIG" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/firealarm{ - pixel_y = 24 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) +"iJh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "iJx" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 1 @@ -53950,9 +54377,8 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "iJG" = ( -/obj/effect/mist, -/turf/simulated/floor/water/pool, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet/bcarpet, +/area/library) "iJP" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -53989,7 +54415,6 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor/border_only, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/research) "iKg" = ( @@ -54079,11 +54504,40 @@ /turf/simulated/floor/plating, /area/hallway/secondary/entry/D3) "iLA" = ( -/obj/structure/bed/chair/sofa/left/brown{ +/obj/structure/table/woodentable, +/obj/item/weapon/storage/fancy/crayons{ + pixel_y = -3; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/markers{ + pixel_y = 6; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/crayons{ + pixel_y = -3; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/markers{ + pixel_y = 6; + pixel_x = 11 + }, +/obj/item/weapon/pen/multi{ + pixel_y = -5; + pixel_x = -6 + }, +/obj/item/weapon/pen/multi{ + pixel_y = 7; + pixel_x = -6 + }, +/obj/item/weapon/pen/multi{ + pixel_y = 1; + pixel_x = -6 + }, +/obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/turf/simulated/floor/carpet/oracarpet, -/area/library) +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/artgallery) "iMc" = ( /obj/structure/cable/green{ d2 = 2; @@ -54225,6 +54679,16 @@ }, /turf/simulated/floor/plating, /area/rnd/lab) +"iPs" = ( +/obj/structure/table/woodentable, +/obj/machinery/atm{ + pixel_y = 30 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "iQe" = ( /obj/structure/cable/green{ d1 = 1; @@ -54258,8 +54722,6 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D3) "iRP" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/weapon/reagent_containers/glass/bucket, /obj/effect/floor_decal/borderfloor{ dir = 8 }, @@ -54270,6 +54732,10 @@ dir = 8; pixel_x = -24 }, +/obj/machinery/vending/hydronutrients{ + dir = 4; + pixel_x = -5 + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "iSo" = ( @@ -54341,6 +54807,23 @@ }, /turf/simulated/floor/tiled, /area/medical/medbay2) +"iUH" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/effect/landmark{ + name = "lightsout" + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "iUU" = ( /obj/machinery/atmospherics/unary/heat_exchanger{ dir = 8 @@ -54697,11 +55180,13 @@ /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/as_emergency) "jcM" = ( -/obj/structure/bed/chair{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/light{ dir = 4 }, -/turf/simulated/floor/carpet, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "jdc" = ( /obj/structure/catwalk, /turf/simulated/floor, @@ -55084,7 +55569,7 @@ dir = 4; frequency = 1430; name = "Mixing Chamber Monitor"; - sensors = list("toxins_mixing_exterior" = "Mixing Chamber - Exterior", "toxins_mixing_interior" = "Mixing Chamber - Interior") + sensors = list("toxins_mixing_exterior"="Mixing Chamber - Exterior","toxins_mixing_interior"="Mixing Chamber - Interior") }, /obj/machinery/light{ dir = 8 @@ -55235,6 +55720,14 @@ /obj/item/clothing/glasses/meson, /turf/simulated/floor, /area/engineering/engine_waste) +"jqg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/seconddeck/aft) "jqu" = ( /obj/machinery/firealarm{ dir = 8; @@ -55327,16 +55820,21 @@ /turf/simulated/floor/plating, /area/engineering/drone_fabrication) "jtu" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 5 - }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "jtC" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/glass{ @@ -55350,18 +55848,6 @@ /obj/random/maintenance/clean, /turf/simulated/floor/plating, /area/maintenance/medbay) -"juj" = ( -/obj/structure/table/marble, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/window/southright{ - name = "Hydroponics" - }, -/obj/machinery/door/window/northleft{ - name = "Hydroponics"; - req_one_access = list(35,28) - }, -/turf/simulated/floor/tiled/dark, -/area/hydroponics) "juu" = ( /obj/item/device/radio/intercom{ dir = 8; @@ -55500,6 +55986,9 @@ /obj/effect/map_helper/airlock/sensor/chamber_sensor, /turf/simulated/floor/tiled/dark, /area/hallway/secondary/entry/D2) +"jxs" = ( +/turf/simulated/wall, +/area/crew_quarters/seconddeck/artgallery) "jxN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -55587,15 +56076,15 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/seconddeck/fpcenter) "jAm" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/effect/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/effect/floor_decal/carpet, +/obj/effect/floor_decal/carpet{ + dir = 10 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet, +/area/crew_quarters/coffee_shop) "jAR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -55747,7 +56236,6 @@ /turf/simulated/floor/tiled/white, /area/medical/genetics) "jEm" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -55800,9 +56288,19 @@ /turf/simulated/floor/tiled/white, /area/medical/medical_lockerroom) "jGd" = ( -/obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/marble, +/obj/item/device/retail_scanner/civilian{ + dir = 1 + }, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "coffeeshop"; + layer = 3.1; + name = "Cafe Shutters" + }, +/obj/effect/floor_decal/corner/brown/diagonal, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "jGK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -55905,6 +56403,9 @@ /obj/effect/floor_decal/corner/lime/border{ dir = 1 }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Hydroponics Fore" + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "jKa" = ( @@ -55961,7 +56462,6 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/research) "jLI" = ( @@ -56176,11 +56676,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 +/obj/effect/floor_decal/borderfloor{ + dir = 1 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 +/obj/effect/floor_decal/corner/green/border{ + dir = 1 }, /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) @@ -56542,6 +57042,14 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/apcenter) +"jYZ" = ( +/obj/machinery/door/airlock/glass{ + name = "Central Access" + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/seconddeck/ascenter) "jZo" = ( /obj/structure/table/glass, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -56578,6 +57086,20 @@ }, /turf/simulated/floor/tiled/white, /area/assembly/robotics) +"jZL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/seconddeck/artsupplies) "jZO" = ( /obj/machinery/cryopod{ dir = 1 @@ -56655,25 +57177,20 @@ /turf/simulated/floor/tiled, /area/medical/morgue) "kdg" = ( -/obj/effect/floor_decal/borderfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/bordercorner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/machinery/camera/network/civilian{ - c_tag = "CIV - Gym Port"; +/obj/effect/floor_decal/borderfloor{ dir = 4 }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, /turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/area/library) "kdq" = ( /obj/effect/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -56816,8 +57333,11 @@ "kfN" = ( /obj/machinery/hologram/holopad, /obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "kfT" = ( /obj/structure/table/glass, /obj/effect/floor_decal/borderfloor{ @@ -56881,6 +57401,12 @@ }, /turf/simulated/floor/tiled, /area/holodeck_control) +"kha" = ( +/obj/effect/floor_decal/corner/yellow/diagonal, +/obj/structure/table/gamblingtable, +/obj/item/weapon/storage/dicecup/loaded, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/coffee_shop) "khr" = ( /obj/machinery/camera/network/research{ c_tag = "SCI - Robotics Starboard"; @@ -57200,20 +57726,33 @@ /turf/simulated/floor/lino, /area/chapel/office) "kqI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/table/woodentable, +/obj/item/paint_palette{ + pixel_y = -6; + pixel_x = 6 }, -/obj/structure/bookcase{ - name = "bookcase (Religious)" +/obj/item/paint_palette{ + pixel_y = 0; + pixel_x = 6 + }, +/obj/item/paint_palette{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/paint_brush{ + pixel_y = -5; + pixel_x = -4 + }, +/obj/item/paint_brush{ + pixel_y = -1; + pixel_x = -6 + }, +/obj/item/paint_brush{ + pixel_y = 4; + pixel_x = -8 }, /turf/simulated/floor/wood, -/area/library) -"krw" = ( -/obj/structure/bookcase{ - name = "bookcase (Adult)" - }, -/turf/simulated/floor/carpet/oracarpet, -/area/library) +/area/crew_quarters/seconddeck/artgallery) "krH" = ( /obj/structure/dispenser, /obj/structure/extinguisher_cabinet{ @@ -57368,8 +57907,8 @@ /area/hallway/secondary/entry/D2) "kyt" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) @@ -57607,17 +58146,8 @@ /turf/simulated/floor/tiled/dark, /area/hallway/secondary/entry/D1) "kFH" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/button/windowtint{ - id = "tabletop_window_tint"; - pixel_x = -13; - pixel_y = -24 - }, -/turf/simulated/floor/carpet, -/area/library) +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "kFY" = ( /obj/structure/table/steel, /obj/item/weapon/wrapping_paper, @@ -57664,6 +58194,12 @@ }, /turf/simulated/floor/tiled/freezer, /area/engineering/engi_restroom) +"kGU" = ( +/obj/structure/sign/directions/recreation{ + pixel_y = 2 + }, +/turf/simulated/wall, +/area/crew_quarters/seconddeck/artgallery) "kGV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -57677,22 +58213,42 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) "kHj" = ( -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/industrial/outline/grey, +/obj/effect/floor_decal/corner/brown/diagonal, /obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 2; + d2 = 4; + icon_state = "2-4" }, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "kHl" = ( -/obj/machinery/door/firedoor/border_only, -/obj/effect/wingrille_spawn/reinforced/polarized{ - id = "library_window_tint" +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 }, -/turf/simulated/floor/plating, -/area/library) +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/effect/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "kHv" = ( /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 @@ -57820,10 +58376,6 @@ /turf/simulated/floor/tiled/hydro, /area/hydroponics) "kLl" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -57837,6 +58389,9 @@ location = "CH1"; next_patrol = "CH2" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "kLo" = ( @@ -57845,6 +58400,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "kLv" = ( @@ -57868,6 +58426,9 @@ location = "CH12"; next_patrol = "SEC" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "kLD" = ( @@ -57878,6 +58439,9 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "kLG" = ( @@ -57888,6 +58452,9 @@ pixel_y = -24; req_access = list(17) }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "kLW" = ( @@ -57897,6 +58464,9 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "kMi" = ( @@ -57922,11 +58492,17 @@ /obj/machinery/status_display{ pixel_y = -32 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "kMw" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "kNS" = ( @@ -57949,6 +58525,9 @@ }, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/purple/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "kOQ" = ( @@ -57989,6 +58568,9 @@ location = "CH11"; next_patrol = "CH12" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/seconddeck/fscenter) "kPH" = ( @@ -58019,7 +58601,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/research) "kQG" = ( @@ -58275,6 +58856,11 @@ }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D2/arrivals) +"lal" = ( +/obj/random/trash, +/obj/random/trash, +/turf/simulated/floor/plating, +/area/maintenance/bar) "las" = ( /obj/effect/floor_decal/industrial/warning, /obj/machinery/light{ @@ -58585,6 +59171,29 @@ /obj/machinery/atmospherics/valve/digital/open{ name = "Hot Loop Waste Gas Management Switch" }, +/obj/machinery/button/remote/blast_door{ + desc = "A remote control-switch for the engine control room blast doors."; + id = "EngineEmitterPortWest"; + name = "Engine Room Blast Doors"; + pixel_x = 32; + pixel_y = 25; + req_access = null; + req_one_access = list(11,24) + }, +/turf/simulated/floor, +/area/engineering/engine_room) +"lkC" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 1 + }, /turf/simulated/floor, /area/engineering/engine_room) "lkD" = ( @@ -58594,15 +59203,29 @@ d2 = 8; icon_state = "1-8" }, +/obj/machinery/atmospherics/valve/digital{ + dir = 4; + name = "secondary TEG valve" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor, /area/engineering/engine_room) "lkQ" = ( -/obj/structure/table/bench/wooden, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 +/obj/machinery/door/airlock{ + name = "Library Office"; + req_access = list(37) }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/library) "llb" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 10 @@ -58610,14 +59233,6 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/machinery/button/remote/blast_door{ - desc = "A remote control-switch for the engine control room blast doors."; - id = "EngineEmitterPortWest"; - name = "Engine Room Blast Doors"; - pixel_y = 25; - req_access = null; - req_one_access = list(11,24) - }, /turf/simulated/floor, /area/engineering/engine_room) "llk" = ( @@ -58767,8 +59382,9 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "lrp" = ( -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/stool/padded, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "lrE" = ( /obj/effect/decal/cleanable/blood, /turf/simulated/floor, @@ -59099,8 +59715,21 @@ /turf/simulated/floor/tiled, /area/engineering/break_room) "lyG" = ( -/turf/simulated/wall, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/structure/filingcabinet, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/library) "lzd" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 6 @@ -59190,6 +59819,29 @@ }, /turf/simulated/floor/plating, /area/maintenance/substation/central) +"lFS" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) +"lGf" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "lGm" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -59256,25 +59908,24 @@ /turf/simulated/floor/tiled/white, /area/medical/patient_wing) "lJh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 }, -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 8 +/obj/structure/bed/chair/sofa/right/brown{ + dir = 2; + layer = 2.9 }, -/turf/simulated/floor/tiled, -/area/hallway/primary/seconddeck/aft) -"lJn" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/green/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/structure/window/basic{ dir = 1 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 +/turf/simulated/floor/carpet/oracarpet, +/area/library) +"lJn" = ( +/obj/structure/bookcase{ + name = "bookcase (Reference)" }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "lJs" = ( /obj/structure/cable{ d1 = 1; @@ -59796,25 +60447,21 @@ /turf/simulated/floor/carpet, /area/hallway/secondary/entry/docking_lounge) "lVD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ +/obj/effect/floor_decal/borderfloor/corner{ dir = 8 }, -/turf/simulated/floor/wood, -/area/library) +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/structure/closet/emcloset, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "lVX" = ( /obj/structure/bed/chair, /obj/effect/floor_decal/borderfloor{ @@ -60083,12 +60730,19 @@ /turf/simulated/floor/reinforced, /area/rnd/misc_lab) "men" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/medbay) +"mfe" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/random/junk, +/turf/simulated/floor, +/area/engineering/engine_room) "mff" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -60438,7 +61092,11 @@ "mnK" = ( /obj/effect/floor_decal/industrial/warning/corner, /obj/effect/floor_decal/industrial/outline/blue, -/obj/machinery/atmospherics/binary/pump/high_power, +/obj/machinery/atmospherics/pipe/cap/visible{ + color = "#00ff00"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "mnN" = ( @@ -60613,8 +61271,8 @@ /turf/simulated/floor/lino, /area/chapel/office) "msX" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8 }, /turf/simulated/floor, /area/engineering/engine_room) @@ -60786,27 +61444,17 @@ }, /turf/simulated/floor/tiled/freezer, /area/engineering/engi_restroom) -"mzJ" = ( -/obj/structure/curtain/black{ - icon_state = "open"; - layer = 2; - name = "privacy curtain"; - opacity = 0 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/library) -"mAb" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/turf/simulated/floor/wood, -/area/library) "mAe" = ( /obj/structure/table/woodentable, /obj/item/device/paicard, /turf/simulated/floor/carpet, /area/hallway/secondary/entry/docking_lounge) +"mAg" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "mAU" = ( /turf/simulated/floor/tiled/freezer, /area/medical/medical_restroom) @@ -60892,6 +61540,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D3) "mEp" = ( @@ -60972,6 +61623,15 @@ }, /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) +"mHl" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "mHY" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/structure/closet/crate, @@ -61073,6 +61733,7 @@ "mKs" = ( /obj/effect/floor_decal/borderfloor/corner, /obj/effect/floor_decal/corner/green/bordercorner, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "mKw" = ( @@ -61124,7 +61785,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -61431,8 +62091,12 @@ /turf/simulated/floor/tiled, /area/holodeck_control) "mTP" = ( -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood/cee, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "mTV" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -61483,6 +62147,15 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/research_foyer) +"mVG" = ( +/obj/structure/window/reinforced{ + dir = 1; + health = 1e+006 + }, +/obj/machinery/beehive, +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/hydroponics) "mWi" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -61595,6 +62268,7 @@ /obj/effect/floor_decal/corner/green/bordercorner2{ dir = 10 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) "mZU" = ( @@ -61748,13 +62422,15 @@ /turf/simulated/floor/carpet/sblucarpet, /area/medical/medbay2) "ncU" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 +/obj/structure/sign/directions/library{ + dir = 5 }, -/turf/simulated/floor/boxing{ - name = "yoga mat" +/obj/structure/sign/directions/chapel{ + dir = 1; + pixel_y = 10 }, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/wall, +/area/library) "nev" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 1; @@ -61784,6 +62460,9 @@ pixel_y = 4 }, /obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/chapel/main) "ngb" = ( @@ -61825,6 +62504,9 @@ /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, /turf/simulated/floor, /area/engineering/engine_room) "nhd" = ( @@ -62012,13 +62694,61 @@ /turf/simulated/floor/tiled, /area/crew_quarters/heads/sc/chief) "nou" = ( -/obj/machinery/atmospherics/unary/heater/sauna{ - dir = 8; - icon_state = "heater_1"; - use_power = 1 +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Library Office" }, -/turf/simulated/floor/tiled/techmaint, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/obj/item/device/radio/intercom{ + dir = 1; + name = "Station Intercom (General)"; + pixel_y = 21 + }, +/obj/machinery/button/windowtint{ + id = "library_window_tint"; + pixel_x = -14; + pixel_y = 24 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/closet/secure_closet{ + anchored = 1; + desc = "It's an immobile card-locked storage unit. A note on the door reads: It's dangerous to go alone. This should help a little bit."; + name = "Press Locker"; + req_one_access = list(21,37) + }, +/obj/item/clothing/shoes/boots/combat{ + desc = "A pair of steel-toed synthleather boots. The tag indicates this pair belongs to the Librarian."; + name = "press combat boots" + }, +/obj/item/clothing/shoes/boots/combat{ + desc = "A pair of steel-toed synthleather boots. The tag indicates this pair belongs to the Librarian."; + name = "press combat boots" + }, +/obj/item/clothing/under/suit_jacket/navy/skirt, +/obj/item/clothing/under/suit_jacket/navy, +/obj/item/clothing/gloves/swat{ + desc = "These tactical gloves are somewhat fire and impact-resistant. The tag within indicates that this pair belongs to the Librarian."; + name = "press gloves" + }, +/obj/item/clothing/gloves/swat{ + desc = "These tactical gloves are somewhat fire and impact-resistant. The tag within indicates that this pair belongs to the Librarian."; + name = "press gloves" + }, +/obj/item/clothing/suit/storage/vest/press, +/obj/item/clothing/suit/storage/vest/press, +/obj/item/clothing/head/helmet{ + desc = "Standard issue gear for frontline press. Protects the head from impacts."; + name = "press helmet" + }, +/obj/item/clothing/head/helmet{ + desc = "Standard issue gear for frontline press. Protects the head from impacts."; + name = "press helmet" + }, +/obj/item/clothing/accessory/armor/helmcover/navy, +/obj/item/clothing/accessory/armor/helmcover/navy, +/turf/simulated/floor/carpet, +/area/library) "noZ" = ( /obj/effect/floor_decal/borderfloor{ dir = 6 @@ -62153,17 +62883,30 @@ /turf/simulated/floor, /area/maintenance/substation/central) "ntX" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass{ + name = "Art Supplies" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0; + dir = 2 }, -/turf/simulated/floor/tiled/hydro, -/area/hydroponics) +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/seconddeck/artsupplies) "nuH" = ( /obj/machinery/power/smes/buildable{ RCon_tag = "Substation - Central" @@ -62214,25 +62957,12 @@ /turf/simulated/floor/tiled/steel_grid, /area/medical/surgery_storage) "nvX" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/vending/snack{ +/obj/structure/bed/chair/comfy/black, +/obj/effect/floor_decal/spline/fancy/wood/cee{ dir = 1 }, -/obj/effect/floor_decal/steeldecal/steel_decals9{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals9, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet/oracarpet, +/area/library) "nwc" = ( /obj/machinery/power/apc{ dir = 1; @@ -62263,14 +62993,11 @@ /turf/simulated/floor/tiled/monotile, /area/hallway/primary/seconddeck/aft) "nwn" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/effect/floor_decal/carpet{ + dir = 8 }, -/obj/machinery/newscaster{ - pixel_y = -30 - }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "nws" = ( /obj/item/weapon/stool/padded, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -62529,21 +63256,37 @@ /turf/simulated/floor/tiled/techfloor, /area/teleporter) "nFo" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/structure/table/marble, +/obj/item/weapon/storage/box/glasses/coffeecup{ + pixel_y = 1; + pixel_x = -6 }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 28 +/obj/item/weapon/storage/box/glasses/coffeemug{ + pixel_y = 12; + pixel_x = -6 }, -/obj/structure/closet/emcloset, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 +/obj/item/weapon/storage/box/glasses/square{ + pixel_y = 1; + pixel_x = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/item/weapon/storage/box/buns{ + pixel_y = 12; + pixel_x = 9 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/storage/box/buns{ + pixel_y = 12; + pixel_x = 9 + }, +/obj/machinery/light, +/obj/effect/floor_decal/borderfloorblack{ + dir = 6 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "nFz" = ( /obj/structure/cable/green{ d1 = 4; @@ -62615,6 +63358,7 @@ /obj/effect/floor_decal/corner/green/border{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "nHS" = ( @@ -62635,9 +63379,10 @@ /turf/simulated/floor/tiled, /area/security/checkpoint2) "nHY" = ( -/obj/structure/sign/directions/gym, -/turf/simulated/wall, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/bench/wooden, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "nId" = ( /obj/structure/morgue, /obj/effect/floor_decal/borderfloor{ @@ -62649,19 +63394,23 @@ /turf/simulated/floor/tiled, /area/medical/morgue) "nIS" = ( -/obj/machinery/photocopier, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/table/standard, +/obj/item/weapon/storage/box, +/obj/item/weapon/storage/box, +/obj/item/weapon/storage/box{ + pixel_y = 11 }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = -32 +/obj/item/weapon/storage/box{ + pixel_y = 11 }, -/obj/machinery/camera/network/civilian{ - c_tag = "CIV - Library Port"; - dir = 1 +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/green/bordercorner, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -22 }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "nIT" = ( /obj/structure/flora/ausbushes/leafybush, /turf/simulated/floor/grass, @@ -62705,20 +63454,18 @@ /turf/simulated/floor/tiled, /area/engineering/locker_room) "nJW" = ( +/obj/effect/floor_decal/corner/brown/diagonal, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "nKk" = ( /obj/structure/cable/green{ d1 = 4; @@ -62744,7 +63491,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/random/junk, /turf/simulated/floor/plating, /area/maintenance/research) @@ -62775,24 +63521,9 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/dockhallway) "nMj" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/secondary/docking_hallway2) +/obj/structure/sign/nosmoking_2, +/turf/simulated/wall, +/area/crew_quarters/seconddeck/artgallery) "nMm" = ( /obj/structure/table/woodentable, /obj/item/weapon/gun/projectile/shotgun/doublebarrel, @@ -62801,7 +63532,7 @@ dir = 1 }, /obj/item/device/radio/intercom{ - desc = "Talk... listen through this."; + desc = "Talk... lisssssten through this."; name = "Station Intercom (Brig Radio)"; pixel_y = -21; wires = 7 @@ -62904,11 +63635,10 @@ /turf/simulated/floor/tiled, /area/quartermaster/lockerroom) "nQn" = ( -/obj/effect/landmark{ - name = "blobstart" - }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "nRd" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor/glass, @@ -63089,27 +63819,27 @@ /turf/simulated/floor/tiled/white, /area/assembly/robotics) "nVA" = ( -/obj/structure/table/marble, -/obj/item/weapon/hand_labeler, -/obj/item/weapon/reagent_containers/food/condiment/small/sugar, -/obj/item/device/radio/intercom{ - dir = 8; - name = "Station Intercom (General)"; - pixel_x = -21 +/obj/structure/flora/ausbushes/brflowers, +/obj/machinery/light{ + dir = 8 }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/turf/simulated/floor/grass, +/area/hydroponics) "nVE" = ( -/obj/structure/table/woodentable, -/obj/item/device/camera, -/turf/simulated/floor/carpet, -/area/crew_quarters/seconddeck/gym) -"nVW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood, +/obj/structure/bookcase{ + name = "bookcase (Non-Fiction)" + }, +/turf/simulated/floor/wood/alt/parquet, /area/library) +"nVW" = ( +/obj/effect/floor_decal/carpet{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "nWH" = ( /obj/machinery/door/firedoor/border_only, /obj/effect/wingrille_spawn/reinforced/polarized{ @@ -63335,13 +64065,18 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/ascenter) "oaL" = ( -/obj/machinery/vending/dinnerware{ - dir = 8; - pixel_x = 4 +/obj/effect/floor_decal/borderfloor{ + dir = 4 }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/effect/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Gallery Starboard"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "obf" = ( /obj/machinery/shieldwallgen{ anchored = 1; @@ -63458,6 +64193,24 @@ }, /turf/simulated/floor/tiled/white, /area/medical/genetics) +"odS" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "oev" = ( /obj/machinery/r_n_d/server/robotics, /turf/simulated/floor/bluegrid{ @@ -63547,6 +64300,19 @@ }, /turf/simulated/floor/plating, /area/maintenance/medbay) +"ohV" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/fscenter) "oie" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -63629,26 +64395,21 @@ }, /turf/simulated/floor/tiled/white, /area/medical/patient_a) +"okh" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/atmospherics/pipe/cap/visible{ + color = "#00ff00"; + dir = 1 + }, +/turf/simulated/floor, +/area/engineering/engine_room) "okq" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/bench/wooden, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/oracarpet, +/area/library) "okt" = ( /obj/machinery/iv_drip, /obj/machinery/power/apc{ @@ -63690,21 +64451,20 @@ /turf/simulated/wall, /area/maintenance/locker) "okR" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 6 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 }, /turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/area/library) "okZ" = ( /turf/simulated/wall, /area/rnd/workshop) @@ -63768,24 +64528,14 @@ /turf/simulated/floor/tiled/white, /area/medical/cryo/autoresleeve) "onb" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals10{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals10, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "ond" = ( /obj/structure/table/glass, /obj/machinery/light{ @@ -63803,6 +64553,8 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "ooQ" = ( @@ -63880,22 +64632,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/patient_wing) -"oqv" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/obj/structure/table/marble, -/obj/item/device/retail_scanner/civilian{ - dir = 1 - }, -/obj/machinery/door/blast/shutters{ - dir = 4; - id = "coffeeshop"; - layer = 3.1; - name = "Cafe Shutters" - }, -/turf/simulated/floor/tiled/old_cargo/yellow, -/area/library) "oqz" = ( /obj/machinery/door/firedoor/border_only, /obj/effect/wingrille_spawn/reinforced, @@ -63940,6 +64676,7 @@ /obj/machinery/light{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "orf" = ( @@ -64027,13 +64764,14 @@ /turf/simulated/floor/tiled/white, /area/medical/virology) "otn" = ( -/obj/structure/table/bench/wooden, -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/item/weapon/bikehorn/rubberducky, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) "ots" = ( /obj/effect/floor_decal/industrial/warning/corner{ dir = 4 @@ -64373,7 +65111,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/research) "oGx" = ( @@ -64394,6 +65131,18 @@ }, /turf/simulated/floor/plating, /area/maintenance/research) +"oHO" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "oHP" = ( /obj/structure/closet/crate, /obj/random/tech_supply, @@ -64802,6 +65551,19 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/foyer) +"oVe" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Gallery Port"; + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "oVk" = ( /obj/item/weapon/cell/high{ charge = 100; @@ -64888,9 +65650,53 @@ /turf/simulated/floor/tiled/techfloor, /area/assembly/chargebay) "oXt" = ( -/obj/machinery/fitness/punching_bag/clown, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8; + pixel_y = -4 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/effect/floor_decal/borderfloorblack{ + dir = 4 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Coffee Shop"; + dir = 9 + }, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "oXN" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 @@ -64969,20 +65775,9 @@ /turf/simulated/floor/tiled/white, /area/medical/medbay) "pac" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "paJ" = ( /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 @@ -64999,6 +65794,20 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/research) +"pbd" = ( +/obj/structure/bookcase/bookcart, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "pbh" = ( /obj/item/device/radio/intercom/department/medbay{ dir = 8; @@ -65048,7 +65857,6 @@ /turf/simulated/floor/plating, /area/maintenance/cargo) "pce" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment{ dir = 4 @@ -65069,6 +65877,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) "pcD" = ( @@ -65140,14 +65951,14 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D2) "pdX" = ( -/obj/effect/floor_decal/steeldecal/steel_decals6{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet/bcarpet, +/area/library) "pes" = ( /obj/structure/table/steel, /obj/item/device/integrated_electronics/debugger{ @@ -65178,13 +65989,10 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D3) "peA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/shield_diffuser, -/turf/simulated/floor/airless, +/obj/item/stack/rods, +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/space, /area/space) "peJ" = ( /turf/simulated/floor/wood, @@ -65383,9 +66191,13 @@ /turf/simulated/floor/tiled/dark, /area/hallway/secondary/entry/D3) "piO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/woodentable, +/obj/item/device/paicard, +/obj/effect/floor_decal/carpet/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "pjG" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -65432,11 +66244,10 @@ /turf/simulated/floor/tiled/white, /area/medical/medbay2) "pli" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Gallery"; + sortType = "Gallery" }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/seconddeck/aft) @@ -65517,11 +66328,6 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) -"pmu" = ( -/obj/structure/table/woodentable, -/obj/item/device/starcaster_news, -/turf/simulated/floor/carpet, -/area/library) "pmJ" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/airlock/engineering{ @@ -65613,7 +66419,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/machinery/alarm{ dir = 4; pixel_x = -22 @@ -65622,29 +66427,29 @@ /turf/simulated/floor/plating, /area/maintenance/research) "poL" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, +/obj/effect/floor_decal/corner/brown/diagonal, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 + dir = 4 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "ppc" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/floor_decal/borderfloorwhite{ @@ -65691,7 +66496,6 @@ /turf/simulated/floor/plating, /area/maintenance/research) "psn" = ( -/obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor{ dir = 4 }, @@ -65731,6 +66535,21 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/rnd/research_foyer) +"puG" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/disposal, +/obj/effect/floor_decal/borderfloorblack{ + dir = 9 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 9 + }, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "puL" = ( /obj/machinery/atmospherics/unary/heat_exchanger{ dir = 4 @@ -66091,10 +66910,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 10 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "pEa" = ( /obj/effect/floor_decal/industrial/warning/corner, @@ -66191,18 +67019,11 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D1) "pFW" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/green/border, -/obj/machinery/light, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/structure/closet/athletic_mixed, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet/oracarpet, +/area/library) "pGf" = ( /obj/machinery/conveyor{ id = "garbage" @@ -66294,6 +67115,15 @@ "pIs" = ( /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/seconddeck/stairwell) +"pIG" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, +/area/engineering/engine_room) "pIK" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -66350,11 +67180,17 @@ /turf/simulated/floor/tiled/freezer, /area/medical/medical_restroom) "pMt" = ( -/obj/machinery/neonsign/cafe{ - id = "cafeopen" +/obj/effect/floor_decal/borderfloor{ + dir = 8 }, -/turf/simulated/wall, -/area/library) +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "pMu" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; @@ -66485,6 +67321,21 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, /area/hallway/primary/seconddeck/dockhallway) +"pOA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/red{ + dir = 4 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 5; + icon_state = "2-5" + }, +/turf/simulated/floor/tiled/dark, +/area/engineering/hallway/atmos_hallway) "pOD" = ( /obj/machinery/smartfridge/secure/virology, /obj/effect/floor_decal/borderfloorwhite{ @@ -66593,6 +67444,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor, /area/engineering/engine_room) "pQe" = ( @@ -66631,6 +67483,13 @@ }, /turf/simulated/floor/tiled/white, /area/medical/virology) +"pQK" = ( +/obj/machinery/light, +/obj/structure/bookcase{ + name = "bookcase (Reference)" + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "pRA" = ( /obj/machinery/hologram/holopad, /obj/effect/floor_decal/industrial/outline/grey, @@ -66673,6 +67532,13 @@ }, /turf/simulated/floor/tiled/dark, /area/hallway/secondary/entry/D2) +"pSe" = ( +/obj/structure/table/gamblingtable, +/obj/effect/floor_decal/carpet{ + dir = 8 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/coffee_shop) "pTK" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan, /obj/machinery/meter, @@ -66685,9 +67551,8 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/atmospherics/valve/digital{ - dir = 4; - name = "secondary TEG valve" +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10 }, /turf/simulated/floor, /area/engineering/engine_room) @@ -66697,9 +67562,28 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/secondary/entry/D1) "pUo" = ( -/obj/random/obstruction, -/turf/simulated/floor/plating, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/marble, +/obj/machinery/microwave{ + pixel_x = -1; + pixel_y = 17 + }, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/weapon/storage/box/donut{ + pixel_y = -4; + pixel_x = 3 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 5 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 5 + }, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "pUs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -66907,13 +67791,16 @@ /turf/simulated/floor/tiled/white, /area/medical/foyer) "pYE" = ( -/obj/item/device/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 21 +/obj/structure/table/marble, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "coffeeshop"; + layer = 3.1; + name = "Cafe Shutters" }, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "pZY" = ( /obj/structure/plasticflaps{ opacity = 1 @@ -66998,8 +67885,9 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/machinery/atmospherics/valve/digital{ - name = "secondary TEG valve" +/obj/machinery/atmospherics/pipe/cap/visible{ + color = "#00ff00"; + dir = 1 }, /turf/simulated/floor, /area/engineering/engine_room) @@ -67020,13 +67908,11 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D3) "qdU" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/boxing{ - name = "yoga mat" - }, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "qev" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -67325,12 +68211,6 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/central) -"qmV" = ( -/obj/structure/bookcase{ - name = "bookcase (Non-Fiction)" - }, -/turf/simulated/floor/carpet/oracarpet, -/area/library) "qmX" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -67364,6 +68244,20 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/central) +"qnP" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass{ + name = "Library" + }, +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/library) "qom" = ( /obj/structure/cable/green{ d1 = 2; @@ -67437,7 +68331,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -67615,19 +68508,20 @@ /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/port_emergency) "quL" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/turf/simulated/floor/wood/alt/parquet, +/area/library) +"quO" = ( +/obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/machinery/firealarm{ + pixel_y = 24 }, /turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/area/hallway/primary/seconddeck/aft) "qvr" = ( /obj/item/weapon/stool/padded, /obj/machinery/camera/network/medbay{ @@ -67642,6 +68536,11 @@ }, /turf/simulated/floor/tiled/white, /area/medical/ward) +"qvK" = ( +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "qwb" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -68050,6 +68949,16 @@ /obj/effect/map_helper/airlock/button/ext_button, /turf/simulated/floor/tiled/dark, /area/hallway/secondary/entry/D1) +"qKm" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/wood, +/area/crew_quarters/cafeteria) "qKC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -68101,11 +69010,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 +/obj/effect/floor_decal/borderfloor/corner{ + dir = 4 }, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/secondary/docking_hallway2) @@ -68129,31 +69038,18 @@ /turf/simulated/wall/r_wall, /area/medical/medical_lockerroom) "qOl" = ( -/obj/structure/window/reinforced/tinted/frosted{ - dir = 1 +/obj/structure/table/bench/wooden, +/obj/structure/flora/pottedplant/small{ + pixel_y = 9 }, -/obj/structure/closet/cabinet, -/obj/item/clothing/under/bathrobe, -/obj/item/clothing/under/bathrobe, -/obj/item/clothing/under/bathrobe, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/weapon/towel/random, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/item/clothing/shoes/sandal, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals9{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals9{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet/oracarpet, +/area/library) "qOT" = ( /obj/machinery/alarm{ dir = 8; @@ -68332,11 +69228,12 @@ /turf/simulated/floor/tiled/white, /area/medical/sleeper) "qWW" = ( -/obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/boxing{ - name = "yoga mat" +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "qWZ" = ( /obj/item/trash/candle, /turf/simulated/floor/plating, @@ -68391,11 +69288,19 @@ /turf/simulated/floor/tiled/white, /area/medical/virology) "qYm" = ( -/obj/structure/bed/chair/office/dark{ - dir = 1 +/obj/effect/floor_decal/borderfloor{ + dir = 4 }, -/turf/simulated/floor/carpet, -/area/library) +/obj/effect/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/machinery/vending/wallmed1{ + dir = 8; + pixel_x = 25; + pixel_y = -1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "qYN" = ( /obj/structure/table/steel, /obj/item/weapon/reagent_containers/food/drinks/glass2/rocks, @@ -68465,13 +69370,9 @@ /turf/simulated/floor/tiled/white, /area/medical/virology) "rae" = ( -/obj/item/device/radio/intercom{ - dir = 1; - name = "Station Intercom (General)"; - pixel_y = 21 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/seconddeck/dockhallway) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "ral" = ( /obj/machinery/airlock_sensor{ id_tag = null; @@ -68523,21 +69424,19 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor, /area/engineering/engine_room) "rbZ" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/green/border, -/obj/machinery/light, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/structure/closet/emcloset, +/obj/structure/extinguisher_cabinet{ + pixel_y = -30; dir = 1 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 - }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "rcp" = ( /turf/simulated/shuttle/wall/hard_corner, /area/shuttle/cryo/station) @@ -68558,6 +69457,7 @@ req_access = list(10) }, /obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "ref" = ( @@ -68635,11 +69535,8 @@ /turf/simulated/floor/tiled/white, /area/medical/ward) "rfR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/wall, +/area/library) "rgn" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -68715,6 +69612,11 @@ }, /turf/simulated/floor/tiled/steel, /area/quartermaster/lockerroom) +"rir" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "ris" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -68812,6 +69714,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fscenter) "rmy" = ( @@ -68835,6 +69738,7 @@ /area/hallway/primary/seconddeck/fscenter) "rnx" = ( /obj/structure/flora/ausbushes/stalkybush, +/obj/machinery/light, /turf/simulated/floor/grass, /area/hallway/primary/seconddeck/fscenter) "roo" = ( @@ -68857,7 +69761,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -68878,22 +69781,26 @@ /turf/simulated/floor/plating, /area/maintenance/research) "rqw" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 22 - }, /obj/machinery/camera/network/second_deck{ c_tag = "Second Deck - Aft Hallway 5"; dir = 8 }, -/obj/effect/floor_decal/borderfloor/corner{ +/obj/effect/floor_decal/borderfloor{ dir = 4 }, -/obj/effect/floor_decal/corner/green/bordercorner{ +/obj/effect/floor_decal/corner/green/border{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) +"rqM" = ( +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/carpet, +/turf/simulated/floor/carpet, +/area/crew_quarters/coffee_shop) "rra" = ( /obj/structure/table/standard, /obj/item/weapon/storage/toolbox/emergency, @@ -68933,25 +69840,17 @@ /turf/simulated/floor/plating, /area/maintenance/chapel) "rrL" = ( -/obj/machinery/vending/fitness{ - dir = 8; - pixel_x = -5 +/obj/structure/bed/chair/office/dark{ + dir = 4 }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/borderfloor{ +/obj/effect/floor_decal/carpet{ dir = 8 }, -/obj/effect/floor_decal/corner/green/border{ +/obj/machinery/light{ dir = 8 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet, +/area/library) "rsq" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 8 @@ -68993,24 +69892,18 @@ /turf/simulated/floor/carpet, /area/hallway/secondary/entry/docking_lounge) "rty" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 +/obj/structure/table/woodentable, +/obj/item/weapon/storage/briefcase, +/obj/item/weapon/storage/briefcase, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 }, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/pen/invisible, +/obj/item/weapon/book/codex/lore/news, +/obj/item/device/tvcamera, +/turf/simulated/floor/carpet, +/area/library) "rtA" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/airlock/maintenance{ @@ -69020,27 +69913,18 @@ /turf/simulated/floor/plating, /area/maintenance/research) "rtL" = ( -/obj/structure/closet/crate/hydroponics{ - desc = "All you need to start your own honey farm."; - name = "beekeeping crate" - }, -/obj/item/beehive_assembly, -/obj/item/bee_smoker, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/bee_pack, -/obj/item/weapon/tool/crowbar, /obj/effect/floor_decal/borderfloor/corner{ dir = 8 }, /obj/effect/floor_decal/corner/lime/bordercorner{ dir = 8 }, -/obj/machinery/light{ - dir = 8 +/obj/machinery/smartfridge/drying_rack{ + dir = 8; + pixel_x = -4 + }, +/obj/machinery/ai_status_display{ + pixel_x = -32 }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) @@ -69076,12 +69960,29 @@ /obj/effect/floor_decal/corner/lime/border{ dir = 8 }, +/obj/machinery/seed_storage/garden{ + dir = 4; + pixel_x = -5 + }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "rue" = ( -/obj/structure/loot_pile/maint/junk, -/turf/simulated/floor/plating, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "NanoMed Wall"; + pixel_y = -24 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "ruN" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -69137,11 +70038,9 @@ /turf/simulated/floor/tiled/white, /area/medical/genetics) "rwP" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/borderfloor/corner, -/obj/effect/floor_decal/corner/lime/bordercorner, -/turf/simulated/floor/tiled/hydro, -/area/hydroponics) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) "rxj" = ( /obj/machinery/computer/cryopod{ pixel_x = -32 @@ -69239,9 +70138,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, +/obj/structure/disposalpipe/segment, +/obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/bar) "rAK" = ( @@ -69342,8 +70240,25 @@ /turf/simulated/floor, /area/maintenance/bar) "rDB" = ( -/turf/simulated/floor/wood, -/area/library) +/obj/effect/floor_decal/borderfloor{ + dir = 10 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 10 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Hydroponics Aft"; + dir = 1 + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "rDC" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -69392,15 +70307,12 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/starboard) "rEG" = ( -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 8; - name = "Locker Room"; - sortType = "Locker Room" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/seconddeck/aft) "rEJ" = ( @@ -69698,14 +70610,21 @@ /turf/simulated/floor/plating, /area/maintenance/medbay) "rNn" = ( -/obj/structure/bookcase{ - name = "bookcase (Religious)" +/obj/structure/table/standard, +/obj/fiftyspawner/plastic, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/green/border, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/fiftyspawner/cardboard, +/obj/item/device/threadneedle, +/obj/item/device/threadneedle{ + pixel_y = 5 }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "rOI" = ( /obj/structure/table/glass, /obj/effect/floor_decal/borderfloor{ @@ -69792,6 +70711,18 @@ /obj/effect/floor_decal/corner/green/border, /turf/simulated/floor/tiled/dark, /area/rnd/workshop) +"rQF" = ( +/obj/structure/bed/chair/sofa/right/brown{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/structure/noticeboard{ + pixel_x = -32 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/artgallery) "rQI" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -69802,6 +70733,16 @@ }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D1) +"rRc" = ( +/obj/structure/curtain/black{ + icon_state = "open"; + layer = 2; + name = "privacy curtain"; + opacity = 0; + dir = 2 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/seconddeck/artgallery) "rRg" = ( /obj/structure/table/steel, /obj/item/stack/material/glass{ @@ -69843,6 +70784,19 @@ }, /turf/simulated/floor/tiled/white, /area/medical/cryo/autoresleeve) +"rRH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/catwalk, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/bar) "rSd" = ( /obj/structure/reagent_dispensers/water_cooler/full, /obj/machinery/light{ @@ -69919,9 +70873,10 @@ /turf/simulated/floor/tiled/white, /area/medical/virology) "rXg" = ( -/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 9 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "rXE" = ( @@ -69992,6 +70947,15 @@ }, /turf/simulated/floor/tiled, /area/engineering/hallway/engineer_hallway) +"rYG" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artgallery) "rYP" = ( /obj/machinery/door/airlock/glass_medical{ name = "Patient Ward" @@ -70187,6 +71151,15 @@ /obj/machinery/door/firedoor/border_only, /turf/simulated/floor/plating, /area/hallway/secondary/entry/D2) +"scv" = ( +/obj/effect/floor_decal/industrial/outline/blue, +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engineering/engine_room) "scT" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/vending/cigarette, @@ -70381,7 +71354,6 @@ /obj/machinery/door/firedoor/border_only, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ req_access = null; req_one_access = null @@ -70541,21 +71513,15 @@ /area/medical/patient_wing) "snD" = ( /obj/effect/floor_decal/borderfloor{ - dir = 6 + dir = 4 }, /obj/effect/floor_decal/corner/lime/border{ - dir = 6 + dir = 4 }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = -24 - }, -/obj/structure/cable/green, -/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/table/standard, +/obj/item/weapon/storage/rollingpapers, +/obj/item/weapon/storage/rollingpapers, +/obj/item/weapon/storage/rollingpapers/blunt, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "soy" = ( @@ -70580,10 +71546,15 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/starboard) "soA" = ( -/obj/machinery/door/firedoor/border_only, -/obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 1; + name = "Library" + }, +/obj/machinery/door/firedoor/multi_tile/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/library) "soW" = ( /obj/machinery/alarm{ pixel_y = 23 @@ -70680,25 +71651,23 @@ /turf/simulated/floor/plating, /area/maintenance/research_medical) "ssC" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/weapon/folder/yellow, -/obj/item/weapon/tape_roll, -/obj/item/weapon/packageWrap, -/turf/simulated/floor/wood, -/area/library) -"ssH" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/easel, +/obj/item/canvas/twentythree_nineteen, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Gallery Aft"; dir = 6 }, /turf/simulated/floor/wood, -/area/library) +/area/crew_quarters/seconddeck/artgallery) +"ssH" = ( +/obj/effect/floor_decal/carpet{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "ssO" = ( /obj/item/weapon/storage/toolbox/mechanical, /obj/structure/table/rack{ @@ -70826,6 +71795,9 @@ /obj/effect/floor_decal/corner/green/bordercorner{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "sxa" = ( @@ -70872,18 +71844,11 @@ /turf/simulated/floor/tiled/dark, /area/chapel/main) "syd" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/storage/briefcase, -/obj/item/weapon/storage/briefcase, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 +/obj/effect/floor_decal/carpet{ + dir = 4 }, -/obj/item/weapon/pen/invisible, -/obj/item/weapon/book/codex/lore/news, -/obj/item/device/tvcamera, -/turf/simulated/floor/carpet, -/area/library) +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "syk" = ( /obj/effect/floor_decal/industrial/warning/corner, /obj/structure/closet/emcloset, @@ -70914,18 +71879,7 @@ /turf/simulated/floor/tiled/white, /area/medical/virology) "syM" = ( -/obj/structure/cable/cyan{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Engine Power"; - name_tag = "Engine Power" - }, -/obj/machinery/atmospherics/binary/pump{ - dir = 1 - }, -/obj/effect/engine_setup/pump_max, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "syU" = ( @@ -70954,6 +71908,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 6 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor, /area/engineering/engine_room) "szT" = ( @@ -71108,14 +72063,22 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "sCT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/table/marble, +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/item/weapon/reagent_containers/food/drinks/shaker{ + pixel_y = 8; + pixel_x = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/item/weapon/reagent_containers/food/drinks/teapot{ + pixel_y = 1; + pixel_x = -5 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) +"sCV" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/turf/simulated/floor/grass, +/area/hydroponics) "sDc" = ( /obj/structure/closet, /obj/random/maintenance/engineering, @@ -71147,6 +72110,7 @@ /area/hallway/primary/seconddeck/port) "sEv" = ( /obj/machinery/door/firedoor/border_only, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/seconddeck/aft) "sEx" = ( @@ -71167,6 +72131,12 @@ /obj/structure/closet/secure_closet/freezer/kitchen, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) +"sFE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "sFM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -71179,23 +72149,22 @@ /area/maintenance/engineering) "sFN" = ( /obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + req_one_access = list(25,28) }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/maintenance{ - req_access = null; - req_one_access = list(12,25,27,28,35) - }, /turf/simulated/floor/plating, -/area/crew_quarters/seconddeck/gym) +/area/crew_quarters/coffee_shop) "sFQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -71288,17 +72257,14 @@ /turf/simulated/floor/lino, /area/crew_quarters/bar) "sJp" = ( -/obj/effect/floor_decal/spline/fancy/wood, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, +/obj/machinery/libraryscanner, /obj/item/device/radio/intercom{ dir = 1; name = "Station Intercom (General)"; pixel_y = 21 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet/bcarpet, +/area/library) "sJI" = ( /obj/item/device/radio/intercom{ dir = 1; @@ -71353,9 +72319,6 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "sLS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -71365,6 +72328,10 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/fpcenter) "sLV" = ( @@ -71391,9 +72358,6 @@ /turf/simulated/floor/carpet, /area/hallway/secondary/entry/docking_lounge) "sMt" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, @@ -71417,10 +72381,6 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/docking_hallway2) "sNg" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 4 }, @@ -71448,6 +72408,9 @@ /obj/effect/floor_decal/corner/purple/border{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/ascenter) "sPi" = ( @@ -71458,16 +72421,15 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/ascenter) "sPy" = ( @@ -71513,24 +72475,9 @@ /turf/simulated/floor/plating, /area/maintenance/substation/medical) "sRC" = ( -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals10{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals10, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "sRD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/light{ @@ -71724,17 +72671,10 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D1) "sYg" = ( -/obj/structure/table/woodentable, -/obj/item/device/taperecorder, -/obj/item/device/tape/random, -/obj/item/device/tape/random, -/obj/item/device/camera, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/item/weapon/barcodescanner, -/turf/simulated/floor/carpet, -/area/library) +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/wood, +/area/crew_quarters/cafeteria) "sYW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -71771,16 +72711,6 @@ /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor, /area/maintenance/cargo) -"sZZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/carpet, -/area/library) "taM" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/floor_decal/borderfloor{ @@ -71953,12 +72883,16 @@ /turf/simulated/floor/plating, /area/maintenance/medbay) "tfB" = ( -/obj/machinery/smartfridge/drying_rack, /obj/effect/floor_decal/borderfloor{ - dir = 10 + dir = 8 }, /obj/effect/floor_decal/corner/lime/border{ - dir = 10 + dir = 8 + }, +/obj/machinery/seed_extractor, +/obj/machinery/status_display{ + layer = 4; + pixel_x = -32 }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) @@ -72020,6 +72954,13 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) +"tgj" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/floor, +/area/engineering/engine_room) "thh" = ( /obj/effect/floor_decal/borderfloorwhite{ dir = 1 @@ -72111,16 +73052,17 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) "tku" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/scale, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "tkz" = ( /obj/structure/cable{ d1 = 4; @@ -72270,12 +73212,22 @@ /turf/simulated/floor/tiled/dark, /area/hallway/secondary/seconddeck/research_medical) "toY" = ( -/obj/machinery/door/firedoor/glass, -/obj/effect/wingrille_spawn/reinforced/polarized{ - id = "sauna" +/obj/structure/table/woodentable, +/obj/item/weapon/pen/blue{ + pixel_x = 5; + pixel_y = 5 }, -/turf/simulated/floor/plating, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/pen/red{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/weapon/pen, +/obj/item/weapon/book/codex/lore/news, +/obj/effect/floor_decal/carpet/blue{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "tpu" = ( /obj/structure/cable/green{ d1 = 4; @@ -72332,17 +73284,12 @@ /turf/simulated/floor/tiled/white, /area/medical/foyer) "tqH" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/carpet{ dir = 1 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet, +/area/crew_quarters/coffee_shop) "tqM" = ( /obj/structure/catwalk, /turf/simulated/floor/plating, @@ -72745,42 +73692,17 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/cyan{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/machinery/light{ dir = 4 }, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/outline/blue, -/obj/effect/engine_setup/coolant_canister, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "tDO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/glass{ - name = "Library" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/steel_grid, -/area/library) +/obj/effect/wingrille_spawn/reinforced, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/crew_quarters/seconddeck/artsupplies) "tDS" = ( /obj/structure/closet/emcloset, /turf/simulated/floor, @@ -72815,12 +73737,6 @@ /area/space) "tEP" = ( /obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/door/blast/regular{ density = 0; icon_state = "pdoor0"; @@ -72837,12 +73753,6 @@ /turf/simulated/floor, /area/engineering/engine_monitoring) "tFJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/machinery/button/remote/blast_door{ desc = "A remote control-switch for the engine control room blast doors."; @@ -72884,29 +73794,21 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D3) "tHc" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 +/obj/structure/table/bench/wooden, +/obj/structure/flora/pottedplant/flower{ + pixel_y = 10; + name = "pietra" }, /obj/item/device/radio/intercom{ - desc = "Talk... listen through this."; - name = "Station Intercom (Brig Radio)"; - pixel_y = -21; - wires = 7 + name = "Station Intercom (General)"; + pixel_y = -22 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "tHk" = ( /obj/machinery/vending/wallmed1{ pixel_x = 25 @@ -72929,6 +73831,13 @@ }, /turf/simulated/floor/tiled, /area/security/checkpoint2) +"tHq" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/engineering/engine_room) "tHE" = ( /obj/structure/cable/green, /obj/structure/cable/green{ @@ -73002,15 +73911,23 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D2) "tKd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = 32 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 +/obj/structure/table/woodentable, +/obj/effect/floor_decal/carpet/blue{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Library Starboard"; + dir = 8 + }, +/obj/item/device/toner{ + pixel_y = 6 + }, +/obj/item/device/toner, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "tMo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -73029,28 +73946,25 @@ /turf/simulated/floor/tiled/white, /area/medical/patient_wing) "tMs" = ( -/obj/machinery/door/airlock/multi_tile/metal{ - dir = 2; - id_tag = "sauna1"; - name = "Sauna" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/obj/machinery/door/firedoor/multi_tile/glass{ - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/seconddeck/gym) +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "tNa" = ( /obj/structure/cable/cyan{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/hologram/holopad, /obj/effect/floor_decal/industrial/outline/grey, /obj/effect/floor_decal/industrial/outline/grey, @@ -73071,12 +73985,8 @@ /turf/simulated/floor/lino, /area/chapel/office) "tPA" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -73128,8 +74038,11 @@ /turf/simulated/floor/plating, /area/quartermaster/delivery) "tSo" = ( -/turf/simulated/wall, -/area/library) +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "tSD" = ( /obj/machinery/door/airlock/glass{ name = "Central Access" @@ -73209,6 +74122,14 @@ /obj/machinery/lapvend, /turf/simulated/floor/tiled/yellow, /area/crew_quarters/coffee_shop) +"tXq" = ( +/obj/machinery/atmospherics/pipe/tank/air{ + dir = 1; + start_pressure = 4559.63 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/security_starboard) "tXV" = ( /obj/structure/cable{ d1 = 1; @@ -73367,7 +74288,11 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 8 }, -/turf/simulated/floor/wood, +/obj/machinery/vending/wallmed1{ + pixel_x = -25; + dir = 4 + }, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "ubU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -73549,6 +74474,17 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/seconddeck/starboard) +"ugI" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "uhf" = ( /obj/structure/cable{ d1 = 4; @@ -73609,21 +74545,19 @@ /turf/simulated/floor/tiled, /area/security/checkpoint2) "uhC" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 +/obj/structure/bed/chair/office/dark, +/obj/effect/landmark/start{ + name = "Librarian" }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/carpet/bcarpet, +/area/library) "uhD" = ( -/obj/effect/floor_decal/spline/fancy/wood/corner{ - dir = 8 +/obj/effect/wingrille_spawn/reinforced/polarized{ + id = "library_window_tint" }, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/library) "uhE" = ( /obj/structure/cable/green{ d1 = 2; @@ -73694,6 +74628,15 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/starboard) +"uiD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "uiI" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -74275,10 +75218,25 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D3) "uCb" = ( -/obj/machinery/fitness/heavy/lifter, -/obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/weapon/folder/yellow, +/obj/item/weapon/tape_roll, +/obj/item/weapon/packageWrap, +/obj/effect/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/effect/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/effect/floor_decal/carpet/blue{ + dir = 9 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "uCr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -74316,17 +75274,97 @@ /turf/simulated/floor/plating, /area/maintenance/cargo) "uCY" = ( -/turf/simulated/floor/carpet, -/area/crew_quarters/seconddeck/gym) -"uDr" = ( -/obj/machinery/light{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/obj/structure/bed/chair/sofa/brown{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/turf/simulated/floor/carpet/oracarpet, +/turf/simulated/floor/wood/alt/parquet, /area/library) +"uDr" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/structure/closet/acloset{ + name = "Art supplies" + }, +/obj/item/weapon/storage/fancy/crayons{ + pixel_y = -3; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/crayons{ + pixel_y = -3; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/crayons{ + pixel_y = -3; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/crayons{ + pixel_y = -3; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/markers{ + pixel_y = 6; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/markers{ + pixel_y = 6; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/markers{ + pixel_y = 6; + pixel_x = 11 + }, +/obj/item/weapon/storage/fancy/markers{ + pixel_y = 6; + pixel_x = 11 + }, +/obj/item/weapon/tape_roll, +/obj/item/weapon/tape_roll, +/obj/item/weapon/tape_roll, +/obj/item/weapon/tape_roll, +/obj/item/device/tape, +/obj/item/device/tape, +/obj/item/device/taperecorder, +/obj/item/device/taperecorder, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/stack/cable_coil/random, +/obj/item/weapon/hand_labeler, +/obj/item/weapon/hand_labeler, +/obj/item/weapon/pen/multi{ + pixel_y = 1; + pixel_x = -6 + }, +/obj/item/weapon/pen/multi{ + pixel_y = 1; + pixel_x = -6 + }, +/obj/item/weapon/pen/multi{ + pixel_y = 1; + pixel_x = -6 + }, +/obj/item/weapon/pen/multi{ + pixel_y = 1; + pixel_x = -6 + }, +/obj/item/device/lightpainter, +/obj/item/device/lightpainter, +/obj/item/weapon/cell/device, +/obj/item/weapon/cell/device, +/obj/item/weapon/cell/device, +/obj/item/weapon/cell/device, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "uDx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/industrial/warning{ @@ -74409,13 +75447,10 @@ /area/medical/virology) "uFq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/carpet/oracarpet, +/area/crew_quarters/seconddeck/artgallery) "uFr" = ( /obj/structure/closet/secure_closet/quartermaster, /obj/structure/disposalpipe/segment, @@ -74539,6 +75574,7 @@ /obj/machinery/door/airlock{ name = "Emergency Storage" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/as_emergency) "uKp" = ( @@ -74734,14 +75770,10 @@ /turf/simulated/floor/plating, /area/hallway/secondary/entry/D3) "uRN" = ( -/obj/effect/floor_decal/steeldecal/steel_decals_central6, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled/monotile, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "uSo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -74841,7 +75873,6 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/floor_decal/industrial/outline, /turf/simulated/floor, /area/engineering/engine_room) @@ -75057,6 +76088,20 @@ /obj/machinery/door/firedoor/border_only, /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/seconddeck/port) +"vcT" = ( +/obj/structure/sign/directions/recreation{ + dir = 1 + }, +/obj/structure/sign/directions/cryo{ + dir = 8; + pixel_y = -10 + }, +/obj/structure/sign/directions/chapel{ + dir = 4; + pixel_y = 10 + }, +/turf/simulated/wall, +/area/crew_quarters/seconddeck/artsupplies) "vcY" = ( /obj/effect/wingrille_spawn/reinforced, /obj/effect/floor_decal/borderfloorwhite, @@ -75176,14 +76221,17 @@ /turf/simulated/floor/tiled, /area/quartermaster/warehouse) "vgH" = ( -/obj/structure/bookcase{ - name = "bookcase (Reference)" +/obj/effect/floor_decal/borderfloor{ + dir = 4 }, -/obj/item/weapon/book/codex/lore/vir, -/obj/item/weapon/book/codex/lore/vir, -/obj/item/weapon/book/codex/lore/robutt, -/turf/simulated/floor/wood, -/area/library) +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/hydro, +/area/hydroponics) "vhy" = ( /obj/machinery/vending/loadout/accessory, /turf/simulated/floor/tiled/white, @@ -75228,23 +76276,30 @@ /turf/simulated/floor/tiled, /area/quartermaster/warehouse) "viP" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - external_pressure_bound = 140; - external_pressure_bound_default = 140; - icon_state = "map_vent_out"; - pressure_checks = 0; - pressure_checks_default = 0; - use_power = 1 +/obj/machinery/door/window/southleft{ + name = "Library Desk Door"; + dir = 8; + req_access = list(37) }, -/obj/machinery/button/remote/airlock{ - id = "sauna1"; - name = "Bolt Control"; - pixel_x = -30; - specialfunctions = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/machinery/ai_status_display{ + pixel_y = -32 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/carpet/bcarpet, +/area/library) "viV" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -75393,11 +76448,11 @@ /turf/simulated/wall, /area/chapel/office) "voV" = ( -/obj/structure/bed/chair{ - dir = 1 +/obj/structure/sign/directions/chapel{ + dir = 6 }, -/turf/simulated/floor/carpet, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/wall, +/area/hallway/primary/seconddeck/aft) "vpB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -75613,11 +76668,15 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "vxy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled/hydro, -/area/hydroponics) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/bar) "vxB" = ( /obj/machinery/iv_drip, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -75674,10 +76733,19 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 6 }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 4 + }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "vyA" = ( /obj/effect/floor_decal/borderfloor, @@ -75738,15 +76806,12 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/starboard) "vAx" = ( -/obj/effect/floor_decal/steeldecal/steel_decals6{ - dir = 9 +/obj/machinery/alarm{ + dir = 4; + pixel_x = -23 }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/turf/simulated/floor/wood/alt/parquet, +/area/library) "vAS" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 6 @@ -76127,6 +77192,11 @@ }, /turf/simulated/floor/tiled/dark, /area/hallway/secondary/seconddeck/research_medical) +"vKr" = ( +/obj/item/device/starcaster_news, +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet, +/area/library) "vKA" = ( /obj/item/device/t_scanner, /obj/item/weapon/storage/box/lights/mixed, @@ -76283,19 +77353,24 @@ /turf/simulated/floor/tiled/white, /area/medical/virology) "vPP" = ( -/obj/machinery/seed_storage/garden, -/turf/simulated/floor/tiled/hydro, -/area/hydroponics) -"vPZ" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) +"vPZ" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/ascenter) "vQa" = ( /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating, @@ -76375,11 +77450,9 @@ /turf/simulated/floor/tiled, /area/storage/primary) "vSK" = ( -/obj/structure/bookcase{ - name = "bookcase (Reference)" - }, -/turf/simulated/floor/wood, -/area/library) +/obj/structure/sign/nosmoking_2, +/turf/simulated/wall, +/area/hydroponics) "vSL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -76622,15 +77695,25 @@ /turf/simulated/floor/tiled/white, /area/medical/patient_wing) "wbx" = ( -/obj/machinery/light/small{ +/obj/structure/bed/chair/comfy/brown, +/obj/effect/landmark/start{ + name = "Librarian" + }, +/obj/machinery/light{ dir = 4 }, -/obj/machinery/button/windowtint{ - id = "sauna"; - pixel_x = 27 +/obj/machinery/alarm{ + dir = 8; + pixel_x = 22 }, -/turf/simulated/floor/tiled/techmaint, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/library) "wbB" = ( /turf/simulated/wall, /area/hallway/primary/seconddeck/port) @@ -76837,6 +77920,18 @@ }, /turf/simulated/shuttle/floor, /area/shuttle/cryo/station) +"wjP" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + color = "#00ff00" + }, +/turf/simulated/floor, +/area/engineering/engine_room) "wjT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -76859,9 +77954,11 @@ /area/hallway/primary/seconddeck/ascenter) "wkq" = ( /obj/machinery/door/firedoor/border_only, -/obj/effect/wingrille_spawn/reinforced, +/obj/effect/wingrille_spawn/reinforced/polarized{ + id = "Gallery" + }, /turf/simulated/floor/plating, -/area/library) +/area/crew_quarters/seconddeck/artgallery) "wkF" = ( /obj/effect/floor_decal/borderfloor/corner2{ dir = 5 @@ -76996,9 +78093,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/machinery/ai_status_display{ - pixel_y = -32 - }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) "wom" = ( @@ -77007,6 +78101,16 @@ }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/seconddeck/starboard) +"woJ" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/seconddeck/aft) "wpq" = ( /obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor{ @@ -77168,21 +78272,9 @@ /turf/simulated/floor/tiled/steel_grid, /area/medical/medbay2) "wsU" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/obj/structure/table/marble, -/obj/machinery/cash_register/civilian{ - dir = 8 - }, -/obj/machinery/door/blast/shutters{ - dir = 4; - id = "coffeeshop"; - layer = 3.1; - name = "Cafe Shutters" - }, -/turf/simulated/floor/tiled/old_cargo/yellow, -/area/library) +/obj/effect/floor_decal/steeldecal/monofloor, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/seconddeck/artgallery) "wsV" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -77432,12 +78524,9 @@ /turf/simulated/floor/tiled/white, /area/medical/virology) "wAZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/corner/brown/diagonal, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/grass, +/area/hydroponics) "wBl" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -77447,18 +78536,16 @@ /turf/simulated/floor/tiled/white, /area/medical/virology) "wBK" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_soft/full{ + dir = 1; + pixel_y = -10 }, -/obj/machinery/scale, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/beige/border, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "wCh" = ( /turf/simulated/floor/tiled/white, /area/medical/surgery2) @@ -77520,6 +78607,9 @@ icon_state = "geiger_wall-p"; scanning = 0 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, /turf/simulated/floor, /area/engineering/engine_room) "wCQ" = ( @@ -77541,13 +78631,15 @@ /turf/simulated/floor/plating, /area/storage/emergency_storage/seconddeck/ap_emergency) "wCU" = ( -/obj/random/junk, +/obj/machinery/atmospherics/binary/pump, +/obj/effect/engine_setup/pump_max, /turf/simulated/floor, /area/engineering/engine_room) "wDm" = ( /obj/machinery/atmospherics/binary/pump, /obj/effect/floor_decal/industrial/warning/corner, /obj/effect/engine_setup/pump_max, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor, /area/engineering/engine_room) "wDy" = ( @@ -77574,14 +78666,6 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/engine_smes) -"wFa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/brown/diagonal, -/turf/simulated/floor/tiled/old_tile/yellow, -/area/library) "wFh" = ( /obj/random/junk, /turf/simulated/floor/plating, @@ -77663,6 +78747,13 @@ }, /turf/simulated/floor/tiled/steel, /area/quartermaster/warehouse) +"wKG" = ( +/obj/machinery/door/firedoor/border_only, +/obj/effect/wingrille_spawn/reinforced/polarized{ + id = "Gallery" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/seconddeck/artsupplies) "wKN" = ( /obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/borderfloor/corner{ @@ -77709,6 +78800,10 @@ }, /turf/simulated/floor/tiled/dark, /area/chapel/main) +"wMF" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/grass, +/area/hydroponics) "wML" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -77917,6 +79012,14 @@ /obj/random/junk, /turf/simulated/floor/plating, /area/maintenance/chapel) +"wSc" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/black{ + dir = 4 + }, +/obj/structure/lattice, +/obj/structure/grille, +/turf/space, +/area/space) "wSU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -78195,25 +79298,32 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/D2) "xao" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/obj/structure/table/standard, -/obj/item/clothing/under/shorts/red, -/obj/item/clothing/under/shorts/red, -/obj/item/clothing/gloves/boxing, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/library) "xaD" = ( /obj/structure/table/glass, /obj/item/weapon/reagent_containers/spray/cleaner{ @@ -78423,12 +79533,11 @@ /turf/simulated/floor/tiled/dark, /area/hallway/primary/seconddeck/starboard) "xfb" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/cap/visible{ - color = "#00ff00"; - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, /turf/simulated/floor, /area/engineering/engine_room) @@ -78558,6 +79667,18 @@ /obj/random/junk, /turf/simulated/floor/plating, /area/maintenance/research_medical) +"xjv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/secondary/docking_hallway2) "xjG" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 1 @@ -78567,6 +79688,19 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/apcenter) +"xjT" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/item/device/radio/intercom/department/medbay{ + dir = 4; + pixel_x = 21 + }, +/turf/simulated/floor/tiled/white, +/area/medical/medbay2) "xka" = ( /obj/structure/lattice, /obj/machinery/shield_diffuser, @@ -78742,10 +79876,24 @@ /turf/simulated/floor/wood, /area/hallway/secondary/entry/docking_lounge) "xoU" = ( -/obj/structure/fitness/punchingbag, -/obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/boxing/gym, -/area/crew_quarters/seconddeck/gym) +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/old_tile/yellow, +/area/crew_quarters/coffee_shop) "xpb" = ( /obj/machinery/shower{ dir = 8; @@ -78794,34 +79942,24 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "xqV" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/under/pants/yogapants, -/obj/item/clothing/under/pants/yogapants, -/obj/item/clothing/under/pants/yogapants, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/clothing/shoes/footwraps, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, -/obj/item/weapon/towel/random{ - pixel_y = 8 - }, +/obj/effect/floor_decal/spline/fancy/wood, /obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, +/obj/machinery/papershredder, /obj/machinery/camera/network/civilian{ - c_tag = "CIV - Gym Fore" + c_tag = "CIV - Library Fore"; + dir = 6 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/machinery/status_display{ + layer = 4; + pixel_y = 32 }, /turf/simulated/floor/tiled, -/area/crew_quarters/seconddeck/gym) +/area/library) "xrN" = ( /obj/structure/cable{ d1 = 2; @@ -78868,14 +80006,12 @@ /turf/simulated/floor/tiled/white, /area/medical/genetics) "xtM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/status_display{ - pixel_y = -32 +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -21 }, /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/aft) @@ -79296,6 +80432,10 @@ /obj/effect/floor_decal/corner/paleblue/bordercorner{ dir = 4 }, +/obj/machinery/light{ + dir = 4; + layer = 3 + }, /turf/simulated/floor/tiled/white, /area/medical/medbay2) "xEA" = ( @@ -79367,10 +80507,20 @@ /turf/simulated/floor/tiled/white, /area/medical/ward) "xGd" = ( -/obj/structure/table/woodentable, -/obj/item/device/starcaster_news, -/turf/simulated/floor/carpet, -/area/crew_quarters/seconddeck/gym) +/obj/machinery/light, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/wood/alt/parquet, +/area/library) "xGn" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, @@ -79539,13 +80689,21 @@ /turf/simulated/floor/tiled, /area/hallway/primary/seconddeck/ascenter) "xNd" = ( -/obj/item/weapon/reagent_containers/glass/bucket/wood{ - pixel_y = 6 +/obj/structure/table/woodentable, +/obj/item/device/taperecorder, +/obj/item/device/tape/random, +/obj/item/device/tape/random, +/obj/item/device/camera, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 }, -/obj/structure/table/rack/shelf, -/obj/item/weapon/reagent_containers/glass/bucket/wood, -/turf/simulated/floor/tiled/techmaint, -/area/crew_quarters/seconddeck/gym) +/obj/item/weapon/barcodescanner, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/turf/simulated/floor/carpet, +/area/library) "xNu" = ( /obj/structure/ladder/updown, /obj/effect/floor_decal/industrial/outline/yellow, @@ -79663,20 +80821,6 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/medical/ward) -"xRk" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/pen/red{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/weapon/pen/blue{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/weapon/pen, -/obj/item/weapon/book/codex/lore/news, -/turf/simulated/floor/wood, -/area/library) "xRo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -79735,16 +80879,16 @@ /obj/structure/sign/directions/cryo{ dir = 8 }, -/obj/structure/sign/directions/gym{ - dir = 6; - pixel_y = -10 - }, -/obj/structure/sign/directions/library{ +/obj/structure/sign/directions/recreation{ dir = 9; pixel_y = 10 }, +/obj/structure/sign/directions/library{ + dir = 6; + pixel_y = -10 + }, /turf/simulated/wall, -/area/library) +/area/crew_quarters/seconddeck/artgallery) "xSp" = ( /obj/machinery/atmospherics/valve, /obj/effect/floor_decal/industrial/warning{ @@ -79854,13 +80998,6 @@ /turf/simulated/floor/tiled, /area/medical/morgue) "xWT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -21 - }, /obj/machinery/camera/network/civilian{ c_tag = "CIV - Chapel Aft"; dir = 1 @@ -79912,6 +81049,74 @@ }, /turf/simulated/floor/plating, /area/maintenance/research_medical) +"xZK" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/structure/closet/acloset{ + name = "Art supplies" + }, +/obj/item/paint_palette{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/paint_palette{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/paint_palette{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/paint_palette{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/paint_brush{ + pixel_y = 4; + pixel_x = -8 + }, +/obj/item/paint_brush{ + pixel_y = 4; + pixel_x = -8 + }, +/obj/item/paint_brush{ + pixel_y = 4; + pixel_x = -8 + }, +/obj/item/paint_brush{ + pixel_y = 4; + pixel_x = -8 + }, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera, +/obj/item/device/camera, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/item/weapon/storage/photo_album, +/obj/item/weapon/storage/photo_album, +/obj/item/device/floor_painter, +/obj/item/device/floor_painter, +/obj/item/device/laser_pointer/blue, +/obj/item/device/laser_pointer/green, +/obj/item/device/laser_pointer/purple, +/obj/item/device/laser_pointer/red, +/obj/machinery/status_display{ + layer = 4; + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/artsupplies) "yaI" = ( /obj/machinery/door/firedoor/border_only, /obj/effect/wingrille_spawn/reinforced, @@ -80024,9 +81229,22 @@ /turf/simulated/floor/tiled, /area/quartermaster/warehouse) "ygw" = ( -/obj/machinery/portable_atmospherics/hydroponics, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lime/border, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "ygz" = ( @@ -93919,7 +95137,7 @@ ahT aaa aaf bhF -bml +wSc anS biZ bnH @@ -93945,10 +95163,10 @@ wWX aaf aag aag -aaf -aaa -aaa -aaa +wWX +aag +aag +wWX aaa aaa aaa @@ -94206,7 +95424,7 @@ aaa aaa aaa aaa -aaa +aag aaa aaa aaa @@ -94434,7 +95652,7 @@ dZD fZN xkV bcn -alP +xfb mnK anT oqZ @@ -94449,7 +95667,7 @@ bcp wCI bkK ilk -oqZ +wjP fsh aJv brT @@ -94464,7 +95682,7 @@ aaa aaa aaa aaa -aaa +aag aaa aaa aaa @@ -94698,7 +95916,7 @@ aPO aPO aPO aRz -fPU +tHq bcp aWF tBz @@ -94722,7 +95940,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -94952,7 +96170,7 @@ puL brT lki qcn -xfb +aOt aOt aPP pRG @@ -94980,7 +96198,7 @@ aaa aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -95209,8 +96427,8 @@ jnX jnX brT alP -mnK -anT +okh +iiA aOr aPN pTK @@ -95496,7 +96714,7 @@ bCE aaa aaa aaa -aaa +wWX aaa aaa aaa @@ -95726,10 +96944,10 @@ jpF brT alP qcn -xfb aOt +mfe aPP -pRG +tgj rcG aUT aWJ @@ -95739,8 +96957,8 @@ bcs wCU bfO bhI -bjf -bkP +lkC +pIG bnO oNJ brT @@ -95754,7 +96972,7 @@ bCC aaa aaa aaa -aaa +aaf aaa aaa aaa @@ -95984,10 +97202,10 @@ jqd bcn lks bqc +ijz bqc bqc bqc -aRE bqc aRE aWK @@ -96250,15 +97468,15 @@ rcV rXg syM tDn -baF +syM bcu wDm aDx bhJ bjh szJ -bnQ -bnQ +scv +hrz brT brW btQ @@ -96515,8 +97733,8 @@ aDy bse bse bnR -bnQ -bnQ +scv +hrz brT byY bCE @@ -101132,7 +102350,7 @@ cxn cyU auK afH -afH +pOA axA ayP ahe @@ -108158,16 +109376,16 @@ fbc nGq nYb vGJ -bDQ +nGq cbx -tSo -tSo -tSo -tSo -tSo +mOG +mOG +mOG +mOG +mOG cma -tSo -cmP +cbx +cbx csZ csY kal @@ -108419,14 +109637,14 @@ mOG mOG mOG ahs -ckr +sCV nVA -bUd -fPV +wAZ +mOG cpl cmB -wkq -kGV +cbx +xjv wql qUd nxW @@ -108676,14 +109894,14 @@ iRP ruc tfB cjH -cjX +iHR cks -cDi -wAZ -wFa +evZ +ipd +mOG cmc cmx -cmQ +cbx jRN dYg lKh @@ -108928,21 +110146,21 @@ myK xqE lKy ybA -sYW +hiu +mAg cjL cjL cjL -ygw -mOG -iHR -ckt +ijW +mVG cIl -ckt -cle -cmf -oaL -wkq -cny +fPV +wAZ +mOG +rRH +lal +cbx +xjv ikD hOK qlp @@ -109187,19 +110405,19 @@ fil lKy jJH kyt -gQu +chp +chp +chp +cjL ijW -vxy -ygw -mOG aQb -cku +wMF ipd -oqv -wsU -cme -tSo -pMt +iBu +mOG +vxy +cAq +cbx fCI vwF nMv @@ -109443,22 +110661,22 @@ nke cmF uVm lKy -ybA +gQu sYW -cka -vPP -cij -cgd -lKy +chp +chp +chp +cjL +ijW hoK ckv -ckv -ckv -ckv -cpm -rDB -wkq -eKZ +mOG +mOG +mOG +dvr +cbx +cbx +qJx pce hYY hMG @@ -109702,21 +110920,21 @@ cmF sFt mOG dTN -sYW -cKg -chp +cWj +ekk cjL +cij cjL -juj -rDB -rDB -rDB -rDB +cgd +pMt rDB +mOG +cmQ +odS cmg lVD tDO -nMj +kGV dlW hOK hwF @@ -109961,16 +111179,16 @@ oqA fhn gMr fBN -vPZ -chq -ekk -rwP -lKy +chp +chp +chp +vPP +cjL eXg -cky -cky +ygw +mOG cli -cky +eKZ cmh cmC cmT @@ -110219,19 +111437,19 @@ iWj hJw cdT cfb -ntX -cjL -cjL -ygw -cjH -cLh -rDB -dcW +chq +chq +chq +dpN +chq +lGf +cpm +mOG uDr -iLA +jZL cmk nIS -tSo +hZr qLX kjI lKh @@ -110429,7 +111647,7 @@ aaa bgq bgq aHe -svX +ikG aFF aLT aoL @@ -110437,7 +111655,7 @@ apJ aqP aFF bJY -aXs +cbJ sLS aZm bbr @@ -110481,15 +111699,15 @@ cgk cFb ewQ snD -mOG +bYm vgH -rDB +ckr +mOG +xZK clJ -evZ -clJ -cmk +cmp rNn -tSo +hZr tfo nKk nPL @@ -110686,7 +111904,7 @@ aaa bgq bgq aHe -svX +cky amE amE anK @@ -110733,21 +111951,21 @@ dVq vyn jTH mOG -lKy +mOG nyM -lKy -mOG -mOG mOG mOG +isR +isR +isR +hgO vSK -rDB -qmV -evZ -krw -cmk -kqI -cmV +mOG +hZr +ntX +wKG +hZr +vcT qJx nFz coJ @@ -110953,7 +112171,7 @@ apK aqQ aUc asR -aVG +aXs sNg abd bbt @@ -110991,21 +112209,21 @@ crq caw crq cfd -crq +akl hdb uba chs cil -cjd -mAb -rDB -rDB +oHO +oVe +rYG +ecb ckO -clk -clK -cmk +rQF +iIG +mHl gYm -tSo +jxs oie foz ctN @@ -111201,12 +112419,12 @@ aaa aKg aKg ajB -aFF +ayL amE alK amF aQw -aoP +lAv apL aQw aSC @@ -111248,22 +112466,22 @@ chW chW cax cbG -chW +qKm cdX cfe cgn -cht +rRc cim -rDB -rDB -rDB -rDB +bOj +wsU +cln +clm egG -clL +dzX clL gMz cmD -tSo +jxs erh mGz ctb @@ -111510,18 +112728,18 @@ ccM cdY cff cgo -cFc +kGU cin -ssC -xRk -bEZ -rDB +cix +cmP +auQ +clQ bGT -clm -clK -cpm +bEZ +bOk +cme cmE -tSo +jxs cnC wNx gil @@ -111768,18 +112986,18 @@ ccN cdZ cCh ccN -tSo +jxs haC -hZr -dzX -cWj +ckg +iLA +ckf ssH ckQ -cln +ckf nVW -cix +ckf nwn -tSo +wkq cnD iZh iIA @@ -112016,8 +113234,8 @@ hUT bOd bVw qgm +sYg crq -cbJ crq crq tge @@ -112026,18 +113244,18 @@ cxh cea cfg cgq -tSo +jxs cip cjg -nVW +kqI ckf uFq eLI -clo -ckd +ckf ckd +ckf kFH -tSo +wkq cnE efb ghX @@ -112284,18 +113502,18 @@ cxi ceb cCl cjN -tSo -tSo -cjh -kHl -tSo -dSc +jxs +ssC +cjg +aoP +ckf +sFE bHR -clq -cer -ckg -qYm -clQ +ckf +tSo +ckf +kFH +wkq frZ gch dvT @@ -112542,18 +113760,18 @@ cxi cec cCm cgs -tSo +jxs cir -sZZ +cjh +fvE +ckf syd -kHl -rDB -eLI -clq -bYm -pmu -qYm -clQ +dSc +ckf +syd +ckf +syd +wkq xCD tCI xfH @@ -112800,19 +114018,19 @@ ccP cei cfo kgw -tSo +jxs cis cji -sYg +cji kHl cVG jtu clr -cmp -cmp -clo -clQ -xCD +oaL +lFS +qYm +jxs +quO tCI hWv iCL @@ -113007,7 +114225,7 @@ fia fQL gZm hVh -iEr +bUd jEc kKF bmX @@ -113058,17 +114276,17 @@ ckj czb cfi ckj -tSo -tSo -tSo -kHl -tSo -mzJ +jxs +nMj +wkq +wkq +jxs +cht cna -pMt -clQ -clQ -clQ +jxs +wkq +wkq +jxs xSl pqA tCI @@ -113324,13 +114542,13 @@ vLn fUQ cmH fmH -pxb +woJ mZR -cgy +rwP sEv -cgy +rwP pli -cgy +wTx sKq cgy cgy @@ -113588,9 +114806,9 @@ jYe rGo oEU rEG -buq -buq +jqg jKf +oEU ieG lHu oEU @@ -113843,16 +115061,16 @@ aZV clT rgL cpB -cnf +bWU psn -cok -coN +cof +cof rqw -dNr +bOe +cbO +otn bVT -cef -cgy -lTI +ccq cpd ltg glE @@ -114041,7 +115259,7 @@ hay hVh iEr jHn -iEr +bUd aXB aXB nDk @@ -114090,7 +115308,7 @@ cgy cgy cfm cgy -ckj +voV clW clW wqh @@ -114101,18 +115319,18 @@ wqh wqh bIw eIM -lyG -lyG +bWY +rfR col -lyG -lyG +col +cnf rfR gJR dTv soA -soA -lyG -rae +rfR +ncU +eaB glE gVl txi @@ -114359,18 +115577,18 @@ clv clW cms xtM -lyG +rfR cnL com rrL dWl vAx -pdX +gar kdg okR tHc -lyG -lyG +rfR +rfR ivF qkD tYk @@ -114593,7 +115811,7 @@ bwR bNn hIE tXm -bOi +bOl bWz kff crt @@ -114625,10 +115843,10 @@ hwH dJS aQR jcM -jcM +rir uCY rbZ -lyG +rfR glE gVl tYk @@ -114851,12 +116069,12 @@ bIx fMC hIE bHv -bOi -crt +bOl +kha ccn ceS -cow -cow +pSe +jAm crt caK cog @@ -114875,18 +116093,18 @@ jMb wqh cmt xWT -lyG -cnN -qdU -coR -qWW -gmm +col +cnM +cot +vKr +hwH +buq eaF eli nVE -voV +onb lJn -soA +rfR fDv tkz tYk @@ -115109,12 +116327,12 @@ bLP bLN hIE bHw -bOj +bOl bWA cco +tqH hsP -bWY -cow +rqM crs cFt cFt @@ -115132,19 +116350,19 @@ fwZ clx clY cmu -lJh -cnm +cgy +col con -qdU -coR -qWW +dhP +dhP +cos kfN eaF -dhP -xGd -voV -lJn -soA +eli +nVE +onb +pQK +rfR glE gVl uwy @@ -115369,7 +116587,7 @@ hIE bHx bOl bWE -ccq +cco caL bWZ cow @@ -115391,18 +116609,18 @@ cly clZ bKp dMp -aYX +qnP cnP -qdU -coR +aTZ +rae qWW gmm -eaF +cnm +iUH ebS -ebS -uCY -lJn -soA +onb +dNr +rfR dhR gVl vZE @@ -115649,18 +116867,18 @@ fbZ wqh twc heo -nHY +col cXB qdU -coR -qWW -gmm -sCT -tKd -tKd -tqH +lJh +pFW +quL +quL +quL +quL +onb fGb -soA +cnN mkf gVl cvg @@ -115847,7 +117065,7 @@ asV hYG arK jKu -kOQ +eoK lMn aXB aXB @@ -115907,18 +117125,18 @@ pfZ skd tso woi -lyG +rfR xqV qdU coR -qWW -gmm +nHY +quL nvX qOl mTP -mTP -pFW -lyG +uiD +hmH +rfR ctK cux viV @@ -116165,18 +117383,18 @@ gNy clW cof hEC -lyG +rfR coT -djr -ncU +qdU +coR eCc -jAm +quL gar -fyN -sRC +quL +quL onb hmH -lyG +rfR rEd gVl qco @@ -116363,7 +117581,7 @@ enG enG iJT iFy -jKu +ckt jKu mKr nGH @@ -116423,18 +117641,18 @@ hPt wqh mfz cpL -lyG +rfR cnR -okq -okq +qdU +coR okq uRN erJ -lyG +aYX aYX tMs -lyG -lyG +xGd +cnN rOI nLg iKC @@ -116621,16 +117839,16 @@ aaa enG enG iJT -iFy -arK +ohV +had mKs nHJ apR aqY -arK +had rmd -aut -avs +jYZ +vPZ azH lGR aut @@ -116681,18 +117899,18 @@ pQe wqh wqh wqh +rfR lyG -lyG -cos +qdU coU cpi quL -wBK -toY +cox +uCb hTu piO viP -lyG +rfR ctL cuy cvh @@ -116888,7 +118106,7 @@ oCL oCL rmM aBF -bbF +vof azH vof aBF @@ -116939,18 +118157,18 @@ gNy oGx eGr wqh -pUo -lyG -cot -lrp -jGd +iPs +quL +qdU +sRC +pac pac tku toY uhC +iJG hzr -hzr -lyG +rfR cIQ tkz kWB @@ -117146,7 +118364,7 @@ pnB hbf rnx auv -bbF +vof azH vof wiE @@ -117198,17 +118416,17 @@ wqh mIz wqh cnq -lyG +lrp cou lrp -uCb +lrp quL xao -lyG +tKd iJh iJG -iJG -toY +rue +rfR mkf gVl cvg @@ -117455,18 +118673,18 @@ idF dCy vvh wqh -pUo -lyG +cbQ +dMF pYE -lrp +fpc jGd -quL +fBa cQM -lyG +rfR gAK -iJG -iJG -toY +qvK +cok +rfR ctK gVl vZE @@ -117713,18 +118931,18 @@ khA wqh wqh wqh -lyG -lyG +puG +ugI bsi coZ dEa kHj fOV -lyG +rfR sJp -iJG -iJG -toY +pdX +pbd +rfR rJK cux iYP @@ -117972,17 +119190,17 @@ eEy rXO wqh cns -lyG +fyN bXh -lrp -jGd -quL +sCT +bOi +djr wBK -toY +rfR uhD lkQ -otn -lyG +uhD +rfR ihz gVl cve @@ -118230,18 +119448,18 @@ lTM pgW wqh cnt -lyG -cox +eke +nQn +nQn nQn -jGd nJW dIu -toY +rfR gbW bYh rty -lyG -jFB +uhD +rJK gVl iqu cvG @@ -118488,17 +119706,17 @@ xKO foi wqh pUo -lyG +coN coy oXt xoU poL nFo -lyG +rfR nou wbx xNd -lyG +rfR cvG cuu cvc @@ -118681,7 +119899,7 @@ cGd ewV cGd cGd -cEd +cDZ iah aWb jMa @@ -118745,18 +119963,18 @@ jnp xKO sxZ wqh -rue -lyG -lyG -lyG -lyG +cbQ +cbQ +cbQ +cbQ +cbQ sFN -lyG -lyG -lyG -lyG -lyG -lyG +cbQ +rfR +rfR +rfR +rfR +rfR glE cux cvb @@ -119180,7 +120398,7 @@ bXK asb ccA cdG -cgb +tXq chd cjr cqx @@ -124858,7 +126076,7 @@ aaa aaa aaa aaa -cjv +aaf cqO csb csb @@ -125113,7 +126331,7 @@ aaa aaa aaa aaa -aaa +wWX aaa wxw aaf @@ -125371,7 +126589,7 @@ aaa aaa aaa aaa -aaa +aag aaa aaa aaf @@ -125629,7 +126847,7 @@ aaa aaa aaa aaa -aaa +aag aaa aaa aaa @@ -125887,8 +127105,8 @@ aaa aaa aaa aaa -aaa -aaa +aaf +aaf aaa aaa aaf @@ -126146,8 +127364,8 @@ aaa aaa aaa aaa -aaa -aaa +aag +wWX aaa wWX aaa @@ -126405,10 +127623,10 @@ aaa aaa aaa aaa -aaa -aab -aaa -aaa +aaf +cnd +aag +aag ctj cvs cwN @@ -127440,8 +128658,8 @@ aaa aaa aaa aaa -wxw -aaa +aWC +aaf aaf aaa aaa @@ -127698,11 +128916,11 @@ abK abK abK abK -abK abx abK abK abK +abK cBi cDd cDd @@ -127956,8 +129174,8 @@ aaa aaa aaa aaa -aaa -aaa +aaf +aaf aaf aaa aaa @@ -129540,7 +130758,7 @@ ylt odi xom iOS -dTG +xjT pkK oht rxD @@ -130794,8 +132012,8 @@ bvj bvj bvj bvj +cjv bvj -peA cvL cxm cyT @@ -131017,7 +132235,7 @@ aaa aaa aaa aaa -aaa +wWX aaa aaa aaa @@ -131275,10 +132493,10 @@ aaa aaa aaa aaa +aaf aaa aaa -aaa -aaa +aaf aaf aaa aaa @@ -131533,10 +132751,10 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +aaf +aag +aag +aaf aaa aaa aaa @@ -131568,7 +132786,7 @@ aaa aaa aaa aag -aag +wWX aaa aaa aaf @@ -131793,7 +133011,7 @@ aaa aaa aaa aaa -aaa +aag aaa aaa aaa @@ -131826,8 +133044,8 @@ aaa aaa aaa aaa +aag cuR -aaf aaa aaf aaa @@ -131874,7 +133092,7 @@ aag aag aag cuR -aaa +aaf aaa aaa aaa @@ -132051,9 +133269,9 @@ aaa aaa aaa aaa -aaa -aaa -aab +aag +aag +peA aaa aaa aaa @@ -132896,7 +134114,7 @@ opM aaa aaa aaa -aaa +aab aaa aaa aaa @@ -133154,7 +134372,7 @@ opM aaa aaa aaa -aaa +aaf aaa aaa aaa diff --git a/maps/southern_cross/southern_cross-3.dmm b/maps/southern_cross/southern_cross-3.dmm index ce6c3aeb18..06a30e5887 100644 --- a/maps/southern_cross/southern_cross-3.dmm +++ b/maps/southern_cross/southern_cross-3.dmm @@ -311,6 +311,33 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_1) +"agw" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 1 + }, +/obj/structure/closet/cabinet, +/obj/item/clothing/under/bathrobe, +/obj/item/clothing/under/bathrobe, +/obj/item/clothing/under/bathrobe, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals9{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals9{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "ahp" = ( /obj/effect/floor_decal/industrial/warning{ dir = 6 @@ -358,6 +385,20 @@ }, /turf/simulated/floor/plating, /area/ai) +"ajO" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "akz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/carpet/turcarpet, @@ -477,12 +518,22 @@ /turf/simulated/floor/greengrid, /area/ai) "ata" = ( -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 8 }, +/obj/machinery/disposal/wall{ + dir = 1; + pixel_y = -35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_5) +"atT" = ( +/obj/machinery/door/firedoor/glass, +/obj/effect/wingrille_spawn/reinforced/polarized{ + id = "sauna" + }, +/turf/simulated/floor/plating, +/area/crew_quarters/seconddeck/gym) "atX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/greengrid, @@ -619,6 +670,12 @@ }, /turf/simulated/floor/tiled/techfloor, /area/ai) +"aBx" = ( +/obj/effect/landmark{ + name = "blobstart" + }, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "aBA" = ( /obj/machinery/ai_slipper{ icon_state = "motion0" @@ -898,6 +955,14 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/floor/wood/broken, /area/maintenance/thirddeck/dormsatmos) +"aNp" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/crew_quarters/seconddeck/gym) "aNx" = ( /obj/structure/cable/green{ d1 = 2; @@ -959,6 +1024,12 @@ /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) +"aSu" = ( +/obj/structure/sign/directions/gym{ + dir = 5 + }, +/turf/simulated/wall, +/area/medical/first_aid_station/thirddeck) "aTo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -1031,8 +1102,10 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/wall{ + pixel_y = 35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_8) "aWg" = ( @@ -1316,6 +1389,21 @@ /obj/effect/floor_decal/industrial/warning/corner, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) +"brm" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aftstarboardcentral) "bvr" = ( /turf/simulated/wall, /area/maintenance/solars/forestarboardsolar) @@ -1382,6 +1470,17 @@ }, /turf/simulated/floor/plating, /area/maintenance/solars/forestarboardsolar) +"bzb" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/cafeteria) "bzs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -1619,6 +1718,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/solars/foreportsolar) +"bJT" = ( +/obj/structure/bed/chair/wood, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/cafeteria) "bLc" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -1736,6 +1842,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, +/obj/machinery/light/small, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) "bRW" = ( @@ -1857,6 +1964,9 @@ icon_state = "32-4" }, /obj/machinery/door/firedoor/border_only, +/obj/structure/disposalpipe/down{ + dir = 4 + }, /turf/simulated/open, /area/maintenance/thirddeck/forestarboard) "bZn" = ( @@ -1871,6 +1981,9 @@ /obj/structure/railing{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "cai" = ( @@ -1879,6 +1992,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "caS" = ( @@ -1888,6 +2004,9 @@ icon_state = "4-8" }, /obj/random/junk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "cbk" = ( @@ -1903,6 +2022,10 @@ dir = 4 }, /obj/random/trash, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "ccv" = ( @@ -2099,10 +2222,13 @@ /turf/simulated/floor/airless, /area/solar/forestarboardsolar) "cim" = ( -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/machinery/disposal/wall{ + dir = 1; + pixel_y = -35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_9) "ciH" = ( @@ -2321,6 +2447,9 @@ dir = 1 }, /obj/structure/loot_pile/maint/boxfort, +/obj/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "cvI" = ( @@ -2328,6 +2457,28 @@ /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) +"cwd" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "cwv" = ( /obj/structure/bed/chair/comfy/blue{ dir = 4 @@ -2346,6 +2497,7 @@ c_tag = "ENG - Solar Fore Starboard Access"; dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "cxs" = ( @@ -2374,6 +2526,14 @@ /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) +"cyo" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 1; + name = "Dorms"; + sortType = "CMO Office" + }, +/turf/simulated/wall/r_wall, +/area/hallway/primary/thirddeck/central) "czb" = ( /obj/machinery/power/terminal{ dir = 8 @@ -2541,6 +2701,7 @@ req_one_access = null }, /obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "cHm" = ( @@ -2562,6 +2723,12 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, +/obj/item/weapon/storage/box/lights/mixed{ + pixel_y = 11 + }, +/obj/item/weapon/storage/box/lights/mixed{ + pixel_y = 11 + }, /turf/simulated/floor/plating, /area/maintenance/substation/dorms) "cHn" = ( @@ -2728,6 +2895,7 @@ /area/maintenance/thirddeck/forestarboard) "cPX" = ( /obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "cQE" = ( @@ -2891,6 +3059,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "dbm" = ( @@ -2984,6 +3153,7 @@ dir = 4 }, /obj/random/junk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "dgt" = ( @@ -3102,6 +3272,9 @@ /obj/structure/table/woodentable, /obj/item/device/paicard, /obj/random/action_figure, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) "dog" = ( @@ -3152,6 +3325,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "dpO" = ( @@ -3244,6 +3418,7 @@ dir = 4 }, /obj/machinery/meter, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "dxT" = ( @@ -3547,6 +3722,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "dIz" = ( @@ -3559,6 +3735,14 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/thirddeck/foreport) +"dIE" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/toilet) "dJu" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/border_only, @@ -3653,6 +3837,13 @@ /area/maintenance/thirddeck/dormsport{ name = "Third Deck Aft Port Maintenance" }) +"dOD" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aftstarboardcentral) "dOI" = ( /obj/machinery/door/firedoor/border_only, /obj/structure/cable/cyan{ @@ -3811,7 +4002,7 @@ /turf/simulated/floor/tiled/techfloor, /area/ai/ai_cyborg_station) "dSP" = ( -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "dSZ" = ( /obj/structure/bed/chair/bay/chair/padded/red/bignest, @@ -3869,6 +4060,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "dVb" = ( @@ -4162,6 +4354,12 @@ }, /turf/simulated/floor/wood, /area/maintenance/thirddeck/dormsatmos) +"edc" = ( +/obj/structure/sign/directions/gym{ + dir = 4 + }, +/turf/simulated/wall, +/area/crew_quarters/cafeteria) "eeA" = ( /obj/machinery/door/firedoor/border_only, /obj/effect/wingrille_spawn/reinforced, @@ -4227,6 +4425,7 @@ dir = 10 }, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "ekj" = ( @@ -4493,8 +4692,26 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/catwalk, /obj/random/trash, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) +"eta" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "euc" = ( /obj/structure/cable/green{ d1 = 1; @@ -4870,6 +5087,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "eHT" = ( @@ -4941,6 +5159,15 @@ }, /turf/simulated/floor/carpet, /area/crew_quarters/heads/sc/hop/quarters) +"eJB" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/black{ + dir = 1 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "eJE" = ( /obj/structure/cable/green{ d1 = 1; @@ -5209,6 +5436,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/forestarboard) "eTG" = ( @@ -5226,6 +5454,32 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_11) +"eUr" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "eUt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/catwalk, @@ -5520,6 +5774,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 9 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/starboard) "fgf" = ( @@ -6044,6 +6299,11 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/starboard) +"fzX" = ( +/obj/structure/closet/emcloset, +/obj/structure/catwalk, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/dormsstarboard) "fAn" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -6126,6 +6386,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/starboard) "fDG" = ( @@ -6144,7 +6405,7 @@ "fDV" = ( /obj/structure/window/reinforced, /obj/effect/floor_decal/carpet, -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "fDZ" = ( /obj/effect/floor_decal/industrial/warning{ @@ -6237,6 +6498,14 @@ }, /turf/simulated/floor/airless, /area/hallway/primary/thirddeck/starboard) +"fGq" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/crew_quarters/seconddeck/gym) "fGy" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -6351,6 +6620,24 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_2) +"fLj" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aftdoorm) "fLv" = ( /obj/structure/cable/green{ d1 = 1; @@ -6429,6 +6716,19 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/port) +"fNe" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "fNB" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 4 @@ -6493,6 +6793,18 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/port) +"fQw" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/aftdoorm) "fQG" = ( /obj/structure/cable/green{ d1 = 1; @@ -6725,6 +7037,24 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/starboard) +"fYj" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle{ + pixel_x = -4; + pixel_y = 6 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 32 + }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Gym Starboard" + }, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "fYV" = ( /obj/structure/cable{ d1 = 1; @@ -6876,13 +7206,10 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/starboard) "gdr" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -6894,6 +7221,11 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 9 }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 1; + name = "Dorms"; + sortType = "CMO Office" + }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) "ger" = ( @@ -7012,6 +7344,17 @@ }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/thirddeck/port) +"gkA" = ( +/obj/structure/table/standard, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/random/soap, +/obj/machinery/light, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "gkF" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 10 @@ -7045,6 +7388,9 @@ /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) +"gno" = ( +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "gnG" = ( /obj/machinery/hologram/holopad, /obj/effect/floor_decal/industrial/outline/grey, @@ -7115,6 +7461,7 @@ /obj/structure/closet/hydrant{ pixel_y = 32 }, +/obj/item/clothing/glasses/meson, /turf/simulated/floor/plating, /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" @@ -7322,6 +7669,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/dark, /area/hallway/primary/thirddeck/starboard) "gGh" = ( @@ -7563,6 +7911,13 @@ "gUA" = ( /turf/simulated/wall/r_wall, /area/crew_quarters/heads/sc/hos/quarters) +"gVj" = ( +/obj/structure/sign/directions/pool{ + dir = 6; + pixel_y = -6 + }, +/turf/simulated/wall, +/area/crew_quarters/seconddeck/gym) "gVl" = ( /obj/effect/wingrille_spawn/reinforced/polarized{ id = "hosquarters" @@ -7570,6 +7925,18 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, /area/crew_quarters/heads/sc/hos/quarters) +"gXC" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/turf/simulated/open, +/area/crew_quarters/seconddeck/gym) "gXD" = ( /obj/machinery/door/firedoor/border_only, /obj/structure/cable/green{ @@ -7763,10 +8130,13 @@ /turf/simulated/shuttle/floor, /area/shuttle/escape_pod7/station) "hjD" = ( -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/machinery/disposal/wall{ + dir = 1; + pixel_y = -35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_2) "hkY" = ( @@ -7840,6 +8210,12 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/heads/sc/restroom) +"hoi" = ( +/obj/structure/table/woodentable, +/obj/item/device/camera, +/obj/effect/floor_decal/carpet, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/gym) "how" = ( /obj/structure/table/standard, /obj/machinery/power/apc{ @@ -8103,6 +8479,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/carpet/blue, /area/crew_quarters/heads/sc/bs) +"hCK" = ( +/obj/effect/mist, +/turf/simulated/floor/water/pool, +/area/crew_quarters/seconddeck/gym) "hCZ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -8246,6 +8626,20 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/port) +"hKY" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/clothing/under/shorts/red, +/obj/item/clothing/under/shorts/red, +/obj/item/clothing/gloves/boxing, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "hLT" = ( /obj/structure/closet/emcloset, /obj/effect/floor_decal/borderfloor{ @@ -8570,6 +8964,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/starboard) "icZ" = ( @@ -8734,6 +9129,21 @@ /area/maintenance/thirddeck/dormsport{ name = "Third Deck Aft Port Maintenance" }) +"ikQ" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/machinery/vending/snack{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals9{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals9, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "inP" = ( /obj/machinery/alarm{ dir = 1; @@ -8768,6 +9178,10 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/central) +"irZ" = ( +/obj/structure/sign/directions/gym, +/turf/simulated/wall, +/area/crew_quarters/seconddeck/gym) "itj" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -8894,6 +9308,14 @@ }, /turf/simulated/floor/carpet, /area/crew_quarters/heads/sc/hos/quarters) +"iAN" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/deck/cards, +/obj/effect/floor_decal/carpet{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/gym) "iBe" = ( /obj/item/device/radio/intercom{ dir = 8; @@ -8932,6 +9354,10 @@ /obj/effect/floor_decal/corner/orange/diagonal, /turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) +"iCa" = ( +/obj/structure/fitness/punchingbag, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "iDw" = ( /turf/simulated/wall, /area/maintenance/thirddeck/aftstarboard) @@ -8948,6 +9374,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "iEb" = ( @@ -9130,8 +9557,10 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/dormsatmos) "iOb" = ( -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/wall{ + pixel_y = 35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_11) "iOx" = ( @@ -9174,12 +9603,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "iSF" = ( /obj/effect/spider/stickyweb/dark, /obj/item/clothing/head/culthood/alt{ - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0) + armor = list("melee"=5,"bullet"=5,"laser"=5,"energy"=10,"bomb"=25,"bio"=10,"rad"=0) }, /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/wood/sif, @@ -9272,10 +9702,13 @@ /turf/simulated/floor/tiled/eris/steel/bar_dance, /area/maintenance/thirddeck/aftport) "iXG" = ( -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/machinery/disposal/wall{ + dir = 1; + pixel_y = -35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_12) "iXT" = ( @@ -9459,7 +9892,7 @@ /area/maintenance/thirddeck/aftstarboard) "jiY" = ( /obj/item/clothing/suit/cultrobes/alt{ - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0) + armor = list("melee"=5,"bullet"=5,"laser"=5,"energy"=10,"bomb"=25,"bio"=10,"rad"=0) }, /turf/simulated/floor/wood/sif/broken, /area/maintenance/thirddeck/aftstarboard) @@ -9532,6 +9965,14 @@ }, /turf/simulated/floor/carpet, /area/bridge/meeting_room) +"jmU" = ( +/obj/structure/table/woodentable, +/obj/item/device/communicator, +/obj/effect/floor_decal/carpet{ + dir = 1 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/gym) "jnb" = ( /obj/structure/bed/chair/comfy/blue, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -9756,6 +10197,7 @@ dir = 9 }, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "jET" = ( @@ -9782,6 +10224,12 @@ }, /turf/simulated/floor/wood/sif, /area/maintenance/thirddeck/aftstarboard) +"jGz" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "jGG" = ( /obj/structure/bed/chair/oldsofa/right{ dir = 1 @@ -10064,6 +10512,20 @@ /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) +"jQs" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/item/clothing/under/shorts/blue, +/obj/item/clothing/under/shorts/blue, +/obj/item/clothing/gloves/boxing/blue, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "jQG" = ( /obj/random/trash_pile, /turf/simulated/floor/tiled/techmaint, @@ -10085,10 +10547,6 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftportcentral) "jQV" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -10098,6 +10556,11 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 1; + name = "Bridge Conference room"; + sortType = "CMO Office" + }, /turf/simulated/floor/tiled, /area/bridge) "jRX" = ( @@ -10188,6 +10651,18 @@ /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) +"jWM" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/item/weapon/material/twohanded/spear/foam, +/obj/item/weapon/material/twohanded/fireaxe/foam, +/obj/item/weapon/material/sword/foam, +/obj/structure/table/rack/shelf, +/obj/item/weapon/material/twohanded/baseballbat/foam, +/obj/machinery/light, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "jWS" = ( /obj/structure/table/woodentable, /obj/item/device/communicator, @@ -10336,6 +10811,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/catwalk, /obj/random/junk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "kfL" = ( @@ -10423,6 +10899,24 @@ /obj/structure/reagent_dispensers/water_cooler/full, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) +"kll" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "klU" = ( /obj/item/clothing/under/swimsuit/striped, /turf/simulated/floor/tiled, @@ -10478,6 +10972,24 @@ }, /turf/simulated/floor/wood, /area/bridge/meeting_room) +"kpZ" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 140; + external_pressure_bound_default = 140; + icon_state = "map_vent_out"; + pressure_checks = 0; + pressure_checks_default = 0; + use_power = 1 + }, +/obj/machinery/button/remote/airlock{ + id = "sauna1"; + name = "Bolt Control"; + pixel_x = -30; + specialfunctions = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "kqq" = ( /obj/structure/bed/chair/comfy/blue{ dir = 1 @@ -10684,6 +11196,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden, /obj/structure/catwalk, /obj/random/trash, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "kET" = ( @@ -10710,6 +11223,22 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/floor/plating, /area/maintenance/substation/dorms) +"kHk" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/obj/effect/floor_decal/carpet{ + dir = 8 + }, +/obj/effect/floor_decal/carpet{ + dir = 1 + }, +/obj/effect/floor_decal/carpet{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/gym) "kHP" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -10820,9 +11349,6 @@ /turf/simulated/floor/wood, /area/bridge/meeting_room) "kPn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -10833,8 +11359,19 @@ /obj/effect/floor_decal/corner/blue/border{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/obj/structure/cable/green, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) +"kQk" = ( +/obj/machinery/fitness/punching_bag/clown, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "kQo" = ( /obj/machinery/hologram/holopad, /obj/structure/cable/green{ @@ -11064,6 +11601,7 @@ /area/maintenance/thirddeck/aftstarboard) "laM" = ( /obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "laU" = ( @@ -11074,6 +11612,15 @@ /area/maintenance/thirddeck/dormsport{ name = "Third Deck Aft Port Maintenance" }) +"lby" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "lbO" = ( /obj/effect/decal/remains/unathi, /turf/simulated/floor/plating, @@ -11334,6 +11881,13 @@ }, /turf/simulated/floor/tiled, /area/bridge) +"lxh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "lyQ" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -11467,9 +12021,6 @@ /area/crew_quarters/heads/sc/sd) "lFA" = ( /obj/structure/bed/chair/office/dark, -/obj/effect/landmark/start{ - name = "Colony Director" - }, /obj/machinery/button/remote/airlock{ desc = "A remote control switch for the Starboard Bridge Doors."; id = "sbridgedoor"; @@ -11484,6 +12035,7 @@ pixel_x = 30; pixel_y = 6 }, +/obj/effect/landmark/start/captain, /turf/simulated/floor/wood, /area/crew_quarters/heads/sc/sd) "lHl" = ( @@ -11925,6 +12477,12 @@ /obj/item/weapon/lipstick/random, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_11) +"mbQ" = ( +/obj/structure/sign/directions/gym{ + dir = 1 + }, +/turf/simulated/wall, +/area/crew_quarters/toilet) "mcQ" = ( /obj/effect/decal/remains/human, /turf/simulated/floor/plating, @@ -11946,6 +12504,15 @@ /obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) +"meR" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/open, +/area/crew_quarters/seconddeck/gym) "mfN" = ( /obj/structure/cable{ d1 = 4; @@ -12509,6 +13076,14 @@ }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) +"mCK" = ( +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/seconddeck/gym) "mCS" = ( /obj/structure/bed/chair/comfy/blue{ dir = 1 @@ -12616,6 +13191,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/wood, /area/bridge/meeting_room) +"mFQ" = ( +/obj/structure/table/bench/wooden, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "mGm" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -12695,6 +13277,21 @@ }, /turf/simulated/floor/tiled, /area/bridge) +"mNv" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "mNM" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ @@ -13018,6 +13615,17 @@ }, /turf/simulated/floor/tiled, /area/bridge) +"ndI" = ( +/obj/machinery/door/airlock/multi_tile/metal{ + dir = 2; + id_tag = "sauna1"; + name = "Sauna" + }, +/obj/machinery/door/firedoor/multi_tile/glass{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/seconddeck/gym) "neu" = ( /obj/effect/floor_decal/borderfloor/corner, /obj/effect/floor_decal/corner/blue/bordercorner, @@ -13172,6 +13780,7 @@ req_one_access = null }, /obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "njY" = ( @@ -13602,6 +14211,7 @@ c_tag = "ENG - Solar Aft Starboard Access"; dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "nFn" = ( @@ -13732,6 +14342,18 @@ }, /turf/simulated/floor/airless, /area/solar/aftportsolar) +"nNF" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 1 + }, +/obj/machinery/atm{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aftstarboardcentral) "nNW" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -13884,6 +14506,19 @@ }, /turf/simulated/floor/plating, /area/maintenance/solars/aftportsolar) +"nSE" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "nSM" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -13911,6 +14546,18 @@ /obj/machinery/door/firedoor/border_only, /turf/simulated/open, /area/maintenance/thirddeck/aftport) +"nTn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/aftstarboardcentral) "nTW" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -14117,7 +14764,7 @@ /obj/effect/floor_decal/corner/brown/bordercorner{ dir = 4 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftdoorm) "ocl" = ( /obj/machinery/door/firedoor/border_only, @@ -14202,6 +14849,9 @@ dir = 4 }, /obj/random/trash_pile, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "ogb" = ( @@ -14230,6 +14880,10 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "ojz" = ( @@ -14239,6 +14893,9 @@ icon_state = "4-8" }, /obj/random/junk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "ojY" = ( @@ -14253,6 +14910,10 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "okd" = ( @@ -14539,6 +15200,10 @@ /obj/random/maintenance/cargo, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) +"oql" = ( +/obj/machinery/status_display, +/turf/simulated/wall, +/area/crew_quarters/seconddeck/gym) "oqC" = ( /obj/effect/floor_decal/industrial/warning/corner{ dir = 4 @@ -14591,6 +15256,7 @@ /area/maintenance/thirddeck/aftstarboard) "owk" = ( /obj/random/trash, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "owK" = ( @@ -14718,6 +15384,17 @@ /obj/effect/floor_decal/corner/white/border, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftportcentral) +"oHo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/seconddeck/gym) "oIl" = ( /obj/machinery/floodlight, /turf/simulated/floor/plating, @@ -14861,6 +15538,7 @@ "oQe" = ( /obj/machinery/door/airlock/maintenance, /obj/machinery/door/firedoor/border_only, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "oQl" = ( @@ -14895,7 +15573,7 @@ dir = 1 }, /obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftportcentral) "oRe" = ( /obj/effect/floor_decal/borderfloor{ @@ -14966,6 +15644,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/catwalk, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftstarboard) "oTk" = ( @@ -14978,6 +15657,15 @@ }, /turf/simulated/floor/tiled/techfloor, /area/hallway/primary/thirddeck/stationgateway) +"oTG" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aftstarboardcentral) "oTP" = ( /obj/effect/floor_decal/techfloor/orange{ dir = 6 @@ -15029,6 +15717,10 @@ /obj/effect/floor_decal/corner/white/bordercorner{ dir = 1 }, +/obj/machinery/alarm{ + frequency = 1441; + pixel_y = 22 + }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "oUT" = ( @@ -15117,7 +15809,7 @@ dir = 1 }, /obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftstarboardcentral) "oZK" = ( /obj/structure/bed/padded, @@ -15148,6 +15840,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "pcr" = ( @@ -15249,7 +15942,7 @@ dir = 4 }, /obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/monotile, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftportcentral) "pfQ" = ( /obj/machinery/atmospherics/unary/vent_pump/on, @@ -15466,6 +16159,10 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/aftstarboardcentral) "ppV" = ( @@ -15479,6 +16176,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/aftstarboardcentral) "pro" = ( @@ -15505,23 +16205,32 @@ dir = 4 }, /obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/monotile, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftstarboardcentral) "prP" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/hologram/holopad, /obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/thirddeck/aftstarboardcentral) "prU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/aftstarboardcentral) @@ -15582,14 +16291,10 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/disposal, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_6) "pwS" = ( @@ -15636,11 +16341,14 @@ /obj/effect/floor_decal/corner/white/border, /obj/effect/floor_decal/corner/blue/border, /obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftportcentral) "pzk" = ( /obj/effect/floor_decal/industrial/warning/corner, /obj/machinery/portable_atmospherics/powered/scrubber, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/aftport) "pzv" = ( @@ -15711,6 +16419,7 @@ /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/white/border, +/obj/machinery/computer/timeclock/premade/south, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftportcentral) "pDc" = ( @@ -15846,49 +16555,64 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "pIw" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/white/border, +/obj/effect/floor_decal/steeldecal/steel_decals6, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "pII" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/blue/border, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 - }, +/obj/structure/table/bench/standard, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "pJf" = ( -/obj/structure/table/bench/standard, /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/white/border, /obj/effect/floor_decal/corner/blue/border, +/obj/structure/table/bench/standard, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "pKB" = ( /obj/machinery/light, -/obj/structure/table/bench/standard, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/white/border, +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/blue/bordercorner{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "pKH" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, /obj/machinery/camera/network/third_deck{ c_tag = "Third Deck - Central Civ Hallway 3"; dir = 1 }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/white/border, -/obj/effect/floor_decal/corner/blue/border, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/blue/bordercorner, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) +"pLe" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "pLV" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 8 @@ -15905,20 +16629,31 @@ /turf/simulated/floor/carpet/sblucarpet, /area/crew_quarters/sleep/vistor_room_8) "pMP" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 +/obj/structure/window/reinforced/tinted/frosted{ + dir = 1 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 +/obj/structure/closet/cabinet, +/obj/item/clothing/under/bathrobe, +/obj/item/clothing/under/bathrobe, +/obj/item/clothing/under/bathrobe, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/item/clothing/shoes/sandal, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals9{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals9{ + dir = 1 }, /turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aftstarboardcentral) -"pNe" = ( -/obj/effect/floor_decal/borderfloor/corner, -/obj/effect/floor_decal/corner/white/bordercorner, -/obj/effect/floor_decal/corner/blue/bordercorner, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aftstarboardcentral) +/area/crew_quarters/seconddeck/gym) "pNg" = ( /obj/machinery/alarm{ dir = 1; @@ -15933,12 +16668,16 @@ /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) +"pOe" = ( +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/thirddeck/aft) "pOU" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/white/border, -/obj/effect/floor_decal/corner/blue/border, /obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftstarboardcentral) "pPh" = ( /obj/structure/table/wooden_reinforced, @@ -15956,36 +16695,25 @@ /turf/simulated/floor/wood, /area/bridge/meeting_room) "pPL" = ( -/obj/effect/floor_decal/borderfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/white/bordercorner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/blue/bordercorner{ - dir = 8 - }, /obj/machinery/light, +/obj/effect/floor_decal/borderfloor, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) +"pQQ" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "pRL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 - }, +/obj/effect/floor_decal/borderfloor, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "pTi" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/floor_decal/borderfloor/corner, -/obj/effect/floor_decal/corner/white/bordercorner, -/obj/effect/floor_decal/corner/blue/bordercorner, +/obj/effect/floor_decal/borderfloor, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "pUj" = ( @@ -15994,17 +16722,6 @@ /obj/effect/floor_decal/corner/blue/border, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) -"pUP" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/white/border, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aftstarboardcentral) "pVD" = ( /obj/machinery/button/remote/airlock{ id = "Dorms9"; @@ -16039,9 +16756,10 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/vistor_room_6) "pWI" = ( +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/white/bordercorner, +/obj/effect/floor_decal/corner/blue/bordercorner, /obj/machinery/light, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/white/border, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftstarboardcentral) "pWK" = ( @@ -16094,33 +16812,22 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aft) "pXC" = ( -/obj/effect/wingrille_spawn/reinforced, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating, -/area/crew_quarters/coffee_shop) -"pYa" = ( -/obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/border_only, +/obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor/plating, -/area/crew_quarters/coffee_shop) -"pYq" = ( -/obj/machinery/door/airlock/glass{ - name = "Botanic Shop" - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) +"pYa" = ( +/turf/simulated/wall, +/area/crew_quarters/seconddeck/gym) "pYv" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock{ - name = "Botanic Shop"; - req_one_access = list(25,28) - }, -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/coffee_shop) +/obj/structure/catwalk, +/obj/random/trash_pile, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/dormsstarboard) "pZq" = ( -/turf/simulated/wall/r_wall, -/area/crew_quarters/coffee_shop) +/obj/machinery/floodlight, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/dormsstarboard) "qaU" = ( /turf/simulated/wall/r_wall, /area/maintenance/thirddeck/dormsstarboard) @@ -16176,7 +16883,7 @@ /obj/effect/floor_decal/carpet{ dir = 9 }, -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "qff" = ( /obj/machinery/computer/arcade, @@ -16186,7 +16893,7 @@ /obj/effect/floor_decal/carpet{ dir = 1 }, -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "qfg" = ( /obj/machinery/button/remote/blast_door{ @@ -16212,6 +16919,16 @@ /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) +"qja" = ( +/obj/effect/floor_decal/steeldecal/steel_decals_central6, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/crew_quarters/seconddeck/gym) "qjx" = ( /obj/machinery/computer/arcade, /obj/effect/floor_decal/carpet{ @@ -16223,7 +16940,7 @@ /obj/effect/floor_decal/carpet{ dir = 5 }, -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "qjy" = ( /obj/structure/sign/directions/ladder_down{ @@ -16241,7 +16958,7 @@ /obj/effect/floor_decal/carpet{ dir = 1 }, -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "qjP" = ( /obj/machinery/firealarm{ @@ -16307,9 +17024,11 @@ }, /area/solar/forestarboardsolar) "qmc" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) +/obj/structure/table/woodentable, +/obj/item/device/starcaster_news, +/obj/effect/floor_decal/carpet, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/gym) "qmA" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -16318,6 +17037,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) "qmU" = ( @@ -16347,11 +17069,6 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_5) -"qnz" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) "qnM" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -16363,62 +17080,125 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftportcentral) "qnV" = ( -/obj/structure/flora/ausbushes/brflowers, +/obj/structure/closet/cabinet, +/obj/item/clothing/under/pants/yogapants, +/obj/item/clothing/under/pants/yogapants, +/obj/item/clothing/under/pants/yogapants, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, /obj/machinery/light{ dir = 1 }, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) -"qoi" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/obj/effect/floor_decal/corner/green/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"qph" = ( -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/obj/structure/sink{ - pixel_y = 16 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"qpl" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/effect/floor_decal/corner/green/border{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"qpo" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Starboard Civ Botanical 1" - }, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) -"qru" = ( -/obj/structure/flora/ausbushes/brflowers, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) -"qrz" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 4 }, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/item/clothing/shoes/footwraps/teshari, +/obj/item/clothing/shoes/footwraps/teshari, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) +"qoi" = ( +/obj/structure/reagent_dispensers/water_cooler/full, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"qph" = ( +/obj/structure/table/standard, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/machinery/light_switch{ + pixel_x = 11; + pixel_y = 24 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/weapon/storage/box/cups, +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"qpl" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/structure/disposalpipe/sortjunction{ + name = "Gym"; + sortType = "Gym" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"qpo" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"qru" = ( +/obj/structure/fitness/weightlifter, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) +"qrz" = ( +/obj/machinery/fitness/heavy/lifter, +/obj/machinery/newscaster{ + pixel_y = 30 + }, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "qrB" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 4 @@ -16432,18 +17212,12 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftportcentral) "qtx" = ( -/obj/structure/table/marble, -/obj/item/weapon/hand_labeler, -/obj/item/weapon/reagent_containers/food/condiment/small/sugar, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/machinery/vending/wallmed1{ + name = "Emergency NanoMed"; + pixel_y = 28 }, -/obj/item/device/retail_scanner/civilian{ - dir = 1 - }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "qtS" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 4 @@ -16464,23 +17238,22 @@ /turf/simulated/wall, /area/maintenance/substation/dorms) "qvB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) -"qvK" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "qwl" = ( /obj/structure/catwalk, /turf/simulated/floor/plating, @@ -16506,14 +17279,19 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/vistor_room_9) "qwG" = ( -/obj/machinery/alarm{ - frequency = 1441; - pixel_y = 22 - }, /obj/structure/catwalk, /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/thirddeck/dormsstarboard) +"qxM" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/cafeteria) "qyy" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -16537,8 +17315,10 @@ name = "Third Deck Aft Port Maintenance" }) "qzn" = ( -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/wall{ + pixel_y = 35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_3) "qzs" = ( @@ -16574,7 +17354,7 @@ /obj/effect/floor_decal/carpet{ dir = 8 }, -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "qAc" = ( /obj/structure/table/woodentable, @@ -16619,7 +17399,6 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/sleep/vistor_room_3) "qAK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/borderfloor/corner{ dir = 4 @@ -16630,6 +17409,9 @@ /obj/effect/floor_decal/corner/blue/bordercorner{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "qEC" = ( @@ -16647,7 +17429,7 @@ dir = 8 }, /obj/machinery/door/firedoor/multi_tile/glass, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftdoorm) "qFl" = ( /obj/structure/bed/chair/comfy/black{ @@ -16754,21 +17536,30 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "qLD" = ( -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) -"qLF" = ( -/obj/structure/flora/ausbushes/brflowers, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "qLH" = ( -/obj/structure/flora/ausbushes/fullgrass, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "qLM" = ( -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftstarboard) "qMf" = ( /obj/machinery/door/airlock{ id_tag = "Dorms8"; @@ -16792,9 +17583,24 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/sleep/vistor_room_8) "qMu" = ( -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) +/obj/machinery/disposal, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "qNG" = ( /obj/structure/windoor_assembly{ dir = 4 @@ -16804,36 +17610,29 @@ /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) -"qPR" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) "qQg" = ( -/obj/machinery/smartfridge/produce, -/turf/simulated/wall, -/area/crew_quarters/coffee_shop) +/obj/machinery/alarm{ + frequency = 1441; + pixel_y = 22 + }, +/obj/effect/floor_decal/corner_steel_grid/full, +/turf/simulated/floor/tiled/dark, +/area/hallway/primary/thirddeck/aftdoorm) "qQv" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/structure/catwalk, +/obj/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) -"qQC" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 22 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) -"qQY" = ( -/obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating, /area/maintenance/thirddeck/dormsstarboard) +"qQC" = ( +/obj/machinery/door/firedoor/multi_tile/glass, +/obj/machinery/door/airlock/multi_tile/glass{ + name = "Gym" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/seconddeck/gym) "qRa" = ( /obj/structure/closet/emcloset, /turf/simulated/floor/plating, @@ -16857,7 +17656,7 @@ /obj/effect/floor_decal/carpet{ dir = 10 }, -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "qSC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16883,6 +17682,10 @@ /obj/effect/floor_decal/corner/orange/diagonal, /turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) +"qTC" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/dormsstarboard) "qTV" = ( /obj/structure/undies_wardrobe, /obj/structure/window/basic{ @@ -16901,6 +17704,9 @@ /area/crew_quarters/sleep/vistor_room_3) "qWi" = ( /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) "qWl" = ( @@ -17004,104 +17810,77 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "rbF" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) -"rcR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"rcT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"rdo" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/green/border{ +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 5 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"rdD" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 }, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/coffee_shop) -"rdO" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 1 + }, +/obj/machinery/vending/fitness{ + dir = 8; + pixel_x = -5 }, -/obj/effect/floor_decal/corner/green/diagonal, /turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) -"rdY" = ( -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/aftport) -"reA" = ( +/area/crew_quarters/seconddeck/gym) +"rcR" = ( +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/brown/bordercorner, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/aftdoorm) +"rcT" = ( +/obj/machinery/light, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/white/border, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aftstarboardcentral) +"rcU" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) +"rdD" = ( +/obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/outline/grey, /obj/structure/cable/green{ - d1 = 4; + d1 = 1; d2 = 8; - icon_state = "4-8" + icon_state = "1-8" }, /obj/structure/cable/green{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/crew_quarters/seconddeck/gym) +"rdO" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/crew_quarters/seconddeck/gym) +"rdY" = ( +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/aftport) +"reN" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/crew_quarters/seconddeck/gym) "rfg" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -17134,48 +17913,23 @@ /turf/space, /area/space) "rgj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/window/westleft{ - req_access = list(25,28) - }, -/obj/machinery/door/blast/shutters{ - dir = 4; - id = "botanicshop"; - layer = 3.3; - name = "Botanic Shutters" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/obj/structure/table/standard, +/obj/machinery/recharger, +/obj/item/weapon/tool/wrench, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "rgy" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) -"rgO" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, -/obj/machinery/light_switch{ - pixel_x = 36; - pixel_y = -6 - }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "rhH" = ( /obj/machinery/floodlight, /turf/simulated/floor/plating, @@ -17322,10 +18076,19 @@ /obj/structure/disposalpipe/junction{ dir = 4 }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 10 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "rqT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -17343,9 +18106,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, /obj/structure/disposalpipe/junction{ dir = 1; icon_state = "pipe-j2" @@ -17363,29 +18123,26 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 9 }, -/turf/simulated/floor/tiled, -/area/hallway/primary/thirddeck/aft) -"rth" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aft) +"rth" = ( /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/aft) "rtM" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable/green{ d1 = 4; d2 = 8; @@ -17399,6 +18156,8 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 10 }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "rtU" = ( @@ -17414,13 +18173,20 @@ name = "Third Deck Aft Port Maintenance" }) "rul" = ( +/obj/structure/fitness/weightlifter, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) +"rvn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/coffee_shop) +/obj/structure/disposalpipe/junction, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "rvI" = ( /obj/structure/cable{ d1 = 1; @@ -17439,49 +18205,61 @@ name = "Third Deck Aft Port Maintenance" }) "rwO" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/corner/green/diagonal, /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 9 }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, /turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "rxM" = ( -/obj/effect/floor_decal/corner/green/border{ - dir = 8 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"ryq" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/railing{ - dir = 8 - }, /obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/crew_quarters/seconddeck/gym) +"ryq" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 }, -/turf/simulated/open, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "ryK" = ( -/obj/structure/railing{ - dir = 1 +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/boxing{ + name = "yoga mat" }, -/obj/machinery/light{ - dir = 1; - layer = 3 - }, -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/turf/simulated/open, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "rzo" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 @@ -17529,6 +18307,14 @@ /obj/structure/catwalk, /turf/simulated/floor/airless, /area/solar/aftportsolar) +"rEL" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/crew_quarters/seconddeck/gym) "rGf" = ( /obj/effect/landmark{ name = "carpspawn" @@ -17546,35 +18332,44 @@ /obj/effect/floor_decal/corner/blue/border, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftportcentral) -"rHa" = ( -/obj/structure/railing{ - dir = 4 +"rHt" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 }, -/obj/structure/railing{ +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, -/obj/effect/floor_decal/spline/plain{ - dir = 5 - }, -/turf/simulated/open, -/area/crew_quarters/coffee_shop) -"rHt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/table/bench/standard, -/obj/effect/floor_decal/corner/green/border{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "rHD" = ( -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "rHG" = ( -/obj/structure/bed/chair, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) +"rHJ" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/crew_quarters/seconddeck/gym) "rJt" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/border_only, @@ -17584,15 +18379,25 @@ name = "Third Deck Aft Port Maintenance" }) "rKc" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "rKh" = ( /obj/structure/cable{ d1 = 2; @@ -17604,21 +18409,43 @@ name = "Third Deck Aft Maintenance" }) "rLC" = ( -/obj/item/weapon/stool/padded, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) -"rMh" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 4; - id = "botanicshop"; - layer = 3.3; - name = "Botanic Shutters" +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"rMh" = ( +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -21 + }, +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/weapon/tape_roll{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/pen, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "rMA" = ( /obj/structure/bed/chair/comfy/black{ dir = 8 @@ -17655,35 +18482,44 @@ /turf/simulated/floor/wood, /area/maintenance/thirddeck/dormsatmos) "rOA" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) -"rOZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/obj/structure/catwalk, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/dormsstarboard) "rQi" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 }, -/obj/machinery/light{ +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) +"rQm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ dir = 1 }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) -"rQm" = ( -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 21 +/obj/effect/floor_decal/corner/brown/border{ + dir = 1 }, -/obj/structure/sink/kitchen{ - pixel_y = 17 +/obj/effect/floor_decal/corner/beige/border{ + dir = 1 }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/aftdoorm) "rQK" = ( /obj/random/trash, /turf/simulated/floor/plating, @@ -17750,8 +18586,23 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 5 }, -/turf/simulated/floor/wood, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) +"rUF" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/hallway/primary/thirddeck/aft) "rUK" = ( /obj/machinery/door/firedoor/multi_tile/glass{ dir = 1 @@ -17763,12 +18614,6 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/cafeteria) "rVl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -17777,6 +18622,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 6 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "rVR" = ( @@ -17796,21 +18642,16 @@ name = "Third Deck Aft Maintenance" }) "rYj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/tiled/monotile, -/area/hallway/primary/thirddeck/aft) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "rYu" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -17819,44 +18660,33 @@ /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "rYR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor/multi_tile/glass{ dir = 1 }, /obj/machinery/door/airlock/multi_tile/glass{ dir = 2; - name = "Botanic Shop" + name = "Gym" }, /turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "rZl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/corner/green/diagonal, /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 6 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "rZr" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -17869,18 +18699,30 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) -"saq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +"rZO" = ( +/obj/structure/table/glass, +/obj/item/weapon/towel{ + color = "#b5651d"; + name = "brown towel" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/item/weapon/towel{ + color = "#00FFFF"; + name = "cyan towel"; + pixel_x = 2; + pixel_y = 4 }, -/obj/effect/floor_decal/corner/green/border{ - dir = 8 +/obj/item/weapon/towel{ + color = "#90ee90"; + name = "green towel" }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) +/obj/machinery/light, +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "NanoMed Wall"; + pixel_y = -30 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "saz" = ( /obj/structure/railing{ dir = 8 @@ -17889,19 +18731,22 @@ dir = 8 }, /turf/simulated/open, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "sbH" = ( /turf/simulated/open, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "scA" = ( /obj/structure/railing{ dir = 4 }, +/obj/structure/railing{ + dir = 1 + }, /obj/effect/floor_decal/spline/plain{ - dir = 4 + dir = 5 }, /turf/simulated/open, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "sdr" = ( /obj/machinery/light, /obj/structure/bed/chair/comfy/black{ @@ -17918,61 +18763,93 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_3) "sdS" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/item/seeds/random, -/obj/item/seeds/random, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "sev" = ( -/obj/structure/table/woodentable, -/obj/item/device/paicard, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/obj/item/device/radio/intercom{ + dir = 1; + name = "Station Intercom (General)"; + pixel_y = 21 + }, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "seR" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/item/device/starcaster_news, +/obj/structure/table/standard, +/obj/structure/flora/pottedplant/subterranean{ + name = "Scrumbus"; + pixel_y = 11 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 9 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "sgm" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/item/seeds/random, -/obj/item/weapon/tape_roll{ - pixel_x = 4; +/obj/structure/table/standard, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random{ pixel_y = 4 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) -"sgq" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 4; - id = "botanicshop"; - layer = 3.3; - name = "Botanic Shutters" +/obj/item/weapon/towel/random{ + pixel_y = 8 }, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen/fountain, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) +"sgq" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/button/windowtint{ + id = "sauna"; + pixel_x = 27 + }, +/turf/simulated/floor/tiled/techmaint, +/area/crew_quarters/seconddeck/gym) +"sgN" = ( +/obj/machinery/ai_status_display, +/turf/simulated/wall, +/area/crew_quarters/seconddeck/gym) "sha" = ( -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) -"shU" = ( -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Starboard Civ Botanical 3"; +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, -/obj/machinery/vending/dinnerware{ - dir = 8; - pixel_x = 6 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"shU" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/maintenance{ + req_access = null + }, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/dormsstarboard) "shV" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/border_only, @@ -18093,40 +18970,60 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_6) -"smc" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -26 - }, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) -"smo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/green/border{ +"sma" = ( +/obj/structure/table/bench/wooden, +/obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) +"smc" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Gym Port"; + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"smo" = ( +/obj/structure/catwalk, +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/dormsstarboard) "smy" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/item/weapon/paper_bin, -/obj/item/weapon/pen, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/machinery/vending/cola{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals9, +/obj/effect/floor_decal/steeldecal/steel_decals9{ + dir = 8 + }, /turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "smF" = ( -/obj/structure/table/woodentable, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) -"soQ" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/deck/tarot, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/cafeteria) "soZ" = ( /obj/effect/floor_decal/borderfloor/corner, /obj/effect/floor_decal/corner/brown/bordercorner, @@ -18137,31 +19034,25 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) "spk" = ( -/obj/structure/table/woodentable, -/obj/random/plushie, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) -"spz" = ( -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/effect/floor_decal/spline/plain{ dir = 4 }, -/obj/machinery/atm{ - pixel_x = 30 +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) +"spz" = ( +/obj/structure/railing{ + dir = 1 }, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) -"sqj" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_coffee/full, -/obj/machinery/button/remote/blast_door{ - id = "botanicshop"; - name = "Botanic Shutters"; - pixel_y = -26 +/obj/machinery/light{ + dir = 1; + layer = 3 }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/open, +/area/crew_quarters/seconddeck/gym) "sqk" = ( /obj/machinery/vending/loadout/overwear, /obj/effect/floor_decal/corner_steel_grid{ @@ -18183,52 +19074,22 @@ /turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/sleep/vistor_room_6) "sra" = ( -/obj/structure/table/marble, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/machinery/scale, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "srK" = ( -/obj/structure/table/marble, -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 +/obj/effect/floor_decal/spline/plain{ + dir = 1 }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) -"srV" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8; - pixel_y = 8 +/obj/structure/extinguisher_cabinet{ + pixel_x = 28 }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4; - pixel_y = 8 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8; - pixel_y = -4 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = 8; - pixel_y = 12 - }, -/obj/item/weapon/reagent_containers/food/drinks/cup{ - pixel_x = -4; - pixel_y = 12 - }, -/turf/simulated/floor/tiled/kafel_full/green, -/area/crew_quarters/coffee_shop) +/obj/structure/closet/emcloset, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "ssq" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -18305,7 +19166,7 @@ dir = 10 }, /turf/simulated/open, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "svw" = ( /obj/structure/railing, /obj/machinery/light{ @@ -18313,7 +19174,7 @@ }, /obj/effect/floor_decal/spline/plain, /turf/simulated/open, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "svN" = ( /turf/simulated/wall/r_wall, /area/maintenance/substation/dorms) @@ -18335,30 +19196,30 @@ dir = 6 }, /turf/simulated/open, -/area/crew_quarters/coffee_shop) +/area/crew_quarters/seconddeck/gym) "sxE" = ( /obj/item/weapon/stool/padded, /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) -"sAa" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) "sAc" = ( -/obj/structure/bed/chair{ - dir = 1 - }, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/obj/structure/catwalk, +/obj/structure/table/steel, +/obj/random/toolbox, +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/dormsstarboard) "sAL" = ( -/obj/effect/floor_decal/corner/green/diagonal, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = 32 +/obj/structure/bed/chair{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/carpet{ + dir = 8 + }, +/obj/effect/floor_decal/carpet, +/obj/effect/floor_decal/carpet{ + dir = 10 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/gym) "sAM" = ( /obj/machinery/vending/wallmed1{ name = "Emergency NanoMed"; @@ -18432,28 +19293,21 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) -"sFQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/floor_decal/corner/green/border{ - dir = 10 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) "sGT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/door/firedoor/glass, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/toilet) "sGW" = ( /obj/structure/bed/chair/bay/chair/padded/red/smallnest, /turf/simulated/floor/carpet/oracarpet, @@ -18462,40 +19316,41 @@ /turf/simulated/floor/tiled/eris/steel/bar_dance, /area/crew_quarters/cafeteria) "sHv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/green/border{ - dir = 6 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"sHN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/hologram/holopad, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/tiled/dark, -/area/crew_quarters/coffee_shop) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "sIj" = ( /turf/simulated/floor/plating, /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) "sIA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/effect/floor_decal/spline/fancy/wood/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "sIJ" = ( /obj/effect/landmark{ name = "maint_pred" @@ -18505,32 +19360,28 @@ name = "Third Deck Aft Maintenance" }) "sJA" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ dir = 4 }, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) +"sJF" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 32 + }, +/obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) -"sJF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 21 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "sJM" = ( /turf/simulated/wall, /area/maintenance/thirddeck/dormsstarboard) @@ -18540,22 +19391,52 @@ name = "Third Deck Aft Port Maintenance" }) "sKt" = ( -/obj/item/clothing/glasses/meson, -/obj/structure/closet/firecloset, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "sLg" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 1; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/obj/machinery/newscaster{ + pixel_y = -30 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "sLp" = ( -/obj/machinery/floodlight, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) +/obj/machinery/atmospherics/unary/heater/sauna{ + dir = 8; + icon_state = "heater_1"; + use_power = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/crew_quarters/seconddeck/gym) "sLM" = ( -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) +/obj/item/weapon/reagent_containers/glass/bucket/wood{ + pixel_y = 6 + }, +/obj/structure/table/rack/shelf, +/obj/item/weapon/reagent_containers/glass/bucket/wood, +/turf/simulated/floor/tiled/techmaint, +/area/crew_quarters/seconddeck/gym) "sLV" = ( /obj/structure/catwalk, /obj/machinery/alarm{ @@ -18669,29 +19550,21 @@ /turf/simulated/open, /area/hallway/primary/thirddeck/aft) "sRw" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green, /obj/effect/floor_decal/borderfloor{ dir = 4 }, /obj/effect/floor_decal/corner/white/border{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) -"sRM" = ( -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/extinguisher_cabinet{ - pixel_x = -28 - }, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) "sSh" = ( /obj/machinery/door/airlock/glass{ name = "Cafeteria" @@ -18700,20 +19573,8 @@ /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/cafeteria) "sSm" = ( -/obj/structure/flora/ausbushes/sunnybush, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) -"sSn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/corner/green/diagonal, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/tiled/steel_grid, +/area/crew_quarters/seconddeck/gym) "sTq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -18727,12 +19588,9 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftportcentral) "sTu" = ( -/obj/machinery/door/airlock{ - name = "Emergency Storage" - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) +/obj/machinery/fitness/heavy/lifter, +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "sUf" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/border_only, @@ -18826,9 +19684,6 @@ dir = 4; pixel_x = -22 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ d1 = 1; @@ -18847,49 +19702,95 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aft) "sZg" = ( -/obj/structure/flora/ausbushes/brflowers, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) -"sZu" = ( -/obj/structure/flora/ausbushes/brflowers, -/obj/machinery/light, -/obj/machinery/portable_atmospherics/hydroponics/soil, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) -"tad" = ( -/obj/effect/floor_decal/corner/green/border{ - dir = 10 - }, -/obj/machinery/vending/hydronutrients{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"tao" = ( -/obj/machinery/seed_storage/garden{ - dir = 1 - }, -/obj/machinery/camera/network/third_deck{ - c_tag = "Third Deck - Starboard Civ Botanical 2"; - dir = 1 - }, +/obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/green/border, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) -"tat" = ( -/obj/machinery/smartfridge/drying_rack, -/obj/effect/floor_decal/corner/green/border{ - dir = 6 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"sZu" = ( +/obj/structure/table/standard, +/obj/structure/bedsheetbin, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 22 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"tad" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 + }, +/obj/effect/floor_decal/corner/green/bordercorner{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -22 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"tao" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) +"tat" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/green/bordercorner, +/obj/structure/closet/athletic_mixed, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "tav" = ( /obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 + dir = 9 }, /turf/simulated/floor/wood, /area/crew_quarters/cafeteria) @@ -18902,14 +19803,18 @@ /turf/simulated/floor/plating, /area/maintenance/thirddeck/dormsatmos) "tbb" = ( -/obj/structure/flora/ausbushes/fullgrass, -/obj/machinery/light, -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 +/obj/structure/bed/chair{ + dir = 8 }, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) +/obj/effect/floor_decal/carpet{ + dir = 4 + }, +/obj/effect/floor_decal/carpet, +/obj/effect/floor_decal/carpet{ + dir = 6 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/gym) "tbC" = ( /obj/machinery/vending/loadout, /obj/machinery/camera/network/third_deck{ @@ -18927,22 +19832,12 @@ name = "Third Deck Aft Maintenance" }) "tci" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ +/obj/structure/catwalk, +/obj/machinery/light/small{ dir = 8 }, -/obj/effect/floor_decal/corner/green/diagonal, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/crew_quarters/coffee_shop) +/turf/simulated/floor/plating, +/area/maintenance/thirddeck/dormsstarboard) "tct" = ( /obj/structure/bed/chair/bay/chair/padded/red/bignest, /obj/item/toy/plushie/teshari, @@ -18951,20 +19846,26 @@ "tcw" = ( /turf/simulated/wall/r_wall, /area/maintenance/thirddeck/aftport) -"ted" = ( -/obj/machinery/portable_atmospherics/hydroponics/soil, -/obj/structure/flora/ausbushes/ywflowers, -/turf/simulated/floor/grass, -/area/crew_quarters/coffee_shop) "tew" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) +/obj/structure/table/bench/wooden, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/item/weapon/bikehorn/rubberducky, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "tfk" = ( -/obj/machinery/portable_atmospherics/powered/scrubber, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) +/obj/effect/floor_decal/spline/fancy/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 1; + name = "Station Intercom (General)"; + pixel_y = 21 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "tfl" = ( /obj/machinery/light{ dir = 1 @@ -18978,19 +19879,14 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_11) "tfQ" = ( -/obj/structure/table/standard, -/obj/item/device/t_scanner, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/box/lights/mixed, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 6 }, -/obj/structure/closet/hydrant{ - pixel_y = -32 +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) +/turf/simulated/floor/wood, +/area/crew_quarters/seconddeck/gym) "tgc" = ( /obj/structure/sign/warning/high_voltage{ pixel_x = -32 @@ -19210,28 +20106,29 @@ /turf/simulated/floor/carpet/purcarpet, /area/crew_quarters/sleep/vistor_room_5) "tno" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, /turf/simulated/floor/tiled/monotile, /area/hallway/primary/thirddeck/aft) "tnz" = ( /turf/simulated/wall, /area/medical/first_aid_station/thirddeck) +"tnF" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/corner/brown/bordercorner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aftdoorm) "tpf" = ( /turf/simulated/wall, /area/crew_quarters/toilet) -"tpm" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled, -/area/crew_quarters/toilet) "tqh" = ( /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/plating, @@ -19252,10 +20149,19 @@ name = "Third Deck Aft Maintenance" }) "ttw" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 10 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "ttG" = ( /obj/structure/cable{ @@ -19464,95 +20370,73 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "tGp" = ( -/obj/structure/table/glass, -/obj/item/weapon/towel{ - color = "#b5651d"; - name = "brown towel" - }, -/obj/item/weapon/towel{ - color = "#00FFFF"; - name = "cyan towel"; - pixel_x = 2; - pixel_y = 4 - }, -/obj/item/weapon/towel{ - color = "#90ee90"; - name = "green towel" +/obj/structure/table/standard, +/obj/item/weapon/storage/laundry_basket, +/obj/machinery/light{ + dir = 1 }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) +"tGH" = ( +/turf/simulated/floor/boxing{ + name = "yoga mat" + }, +/area/crew_quarters/seconddeck/gym) "tGU" = ( -/obj/structure/table/glass, -/obj/item/weapon/towel, -/obj/item/weapon/towel{ - color = "#FFD700"; - name = "gold towel" +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 }, -/obj/item/weapon/towel{ - color = "#3fc0ea"; - name = "light blue towel"; - pixel_x = 2; - pixel_y = 4 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "tHb" = ( /obj/structure/lattice, /obj/structure/grille/broken, /turf/space, /area/space) -"tHX" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) "tIi" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/recharge_station{ + pixel_y = 1 }, -/obj/machinery/light{ +/obj/machinery/light/small{ dir = 1 }, -/obj/machinery/vending/wallmed1{ - name = "NanoMed Wall"; - pixel_y = 30 +/obj/machinery/recharge_station{ + pixel_y = 1 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) -"tIF" = ( -/obj/machinery/firealarm{ - layer = 3.3; - pixel_y = 26 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "tIP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/structure/toilet, +/obj/structure/toilet, +/obj/machinery/light/small{ + dir = 1 }, /obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 + dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 + dir = 5 }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) @@ -19563,17 +20447,18 @@ }, /turf/simulated/floor/tiled/dark, /area/crew_quarters/cafeteria) -"tJT" = ( -/obj/structure/table/standard, -/obj/item/weapon/storage/laundry_basket, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) "tKC" = ( /turf/simulated/wall, /area/crew_quarters/sleep/vistor_room_3) "tKY" = ( /turf/simulated/wall/r_wall, /area/crew_quarters/sleep/vistor_room_6) +"tLN" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/white/border, +/obj/structure/table/bench/standard, +/turf/simulated/floor/tiled, +/area/hallway/primary/thirddeck/aftstarboardcentral) "tMc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -19619,10 +20504,10 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 6 }, +/obj/effect/floor_decal/corner/orange/diagonal, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, -/obj/effect/floor_decal/corner/orange/diagonal, /turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "tOU" = ( @@ -19737,10 +20622,19 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 5 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "tUY" = ( /obj/structure/cable/green{ @@ -19940,12 +20834,6 @@ /area/hallway/primary/thirddeck/aft) "tZj" = ( /obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/machinery/door/airlock/glass_medical{ name = "First-Aid Station"; req_access = newlist(); @@ -19974,12 +20862,6 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/vistor_room_12) "uaQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, @@ -19994,31 +20876,32 @@ /turf/simulated/floor/tiled/white, /area/medical/first_aid_station/thirddeck) "ucr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, /turf/simulated/floor/tiled/white, /area/medical/first_aid_station/thirddeck) "uct" = ( /obj/machinery/hologram/holopad, /obj/effect/floor_decal/industrial/outline/grey, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/tiled/white, /area/medical/first_aid_station/thirddeck) "ucA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, /obj/machinery/light{ dir = 4 }, /turf/simulated/floor/tiled/white, /area/medical/first_aid_station/thirddeck) +"ucG" = ( +/obj/machinery/door/airlock{ + name = "Unisex Showers" + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "udk" = ( /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/door/airlock/glass_external{ @@ -20034,14 +20917,13 @@ name = "Third Deck Aft Maintenance" }) "udn" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -28 +/obj/machinery/disposal/wall{ + dir = 4; + pixel_y = 0; + pixel_x = -37 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 +/obj/structure/disposalpipe/trunk{ + dir = 4 }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) @@ -20066,11 +20948,8 @@ /turf/simulated/floor/carpet, /area/bridge/meeting_room) "ueI" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 +/obj/machinery/door/airlock{ + name = "Unit 3" }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) @@ -20113,13 +20992,6 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_9) -"uhb" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) "uhf" = ( /obj/effect/floor_decal/industrial/warning{ dir = 10 @@ -20129,66 +21001,38 @@ name = "Third Deck Aft Port Maintenance" }) "uiC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/obj/machinery/door/airlock{ + name = "Unit 2" }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "uiK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "uiU" = ( /obj/structure/table/wooden_reinforced, /obj/machinery/recharger, /turf/simulated/floor/wood, /area/bridge/meeting_room) "uju" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) -"ujw" = ( /obj/machinery/door/airlock{ - name = "Unisex Showers" + name = "Unit 1" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "ujU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/light{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 6 +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) @@ -20203,9 +21047,7 @@ dir = 8; pixel_x = 22 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "ull" = ( @@ -20297,6 +21139,7 @@ pixel_x = -28 }, /obj/effect/floor_decal/corner/orange/diagonal, +/obj/structure/closet/emcloset, /turf/simulated/floor/tiled, /area/crew_quarters/cafeteria) "urV" = ( @@ -20406,6 +21249,23 @@ /obj/item/weapon/towel/random, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/vistor_room_6) +"uye" = ( +/obj/machinery/washing_machine, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "uyY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -20475,6 +21335,7 @@ /area/hallway/primary/thirddeck/aft) "uAL" = ( /obj/machinery/vending/wallmed1{ + dir = 1; name = "NanoMed Wall"; pixel_y = -30 }, @@ -20567,7 +21428,6 @@ /turf/simulated/floor/tiled/white, /area/medical/first_aid_station/thirddeck) "uEX" = ( -/obj/structure/curtain/open/shower, /obj/machinery/shower{ dir = 1 }, @@ -20577,55 +21437,65 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/vistor_room_9) -"uFi" = ( -/obj/machinery/door/airlock{ - name = "Unit 2" - }, -/obj/machinery/door/firedoor/border_only, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) "uFm" = ( /obj/random/obstruction, /turf/simulated/floor/wood/broken, /area/maintenance/thirddeck/dormsatmos) "uFJ" = ( -/obj/machinery/door/airlock{ - name = "Unit 1" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/obj/machinery/door/firedoor/border_only, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "uFP" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) -"uGK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 }, -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "uIm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 1 }, -/obj/machinery/light{ - dir = 8 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 6 }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "uIt" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/effect/floor_decal/steeldecal/steel_decals4, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 10 }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) @@ -20668,27 +21538,20 @@ /turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aft) "uMG" = ( -/obj/machinery/recharge_station, -/obj/machinery/light/small, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 +/obj/structure/mirror{ + pixel_y = -28 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 +/obj/structure/sink{ + dir = 1 }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "uNb" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/machinery/light/small, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 +/obj/machinery/power/apc{ + name = "south bump"; + pixel_y = -24 }, +/obj/structure/cable/green, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "uNf" = ( @@ -20708,22 +21571,22 @@ name = "Third Deck Aft Port Maintenance" }) "uNJ" = ( -/obj/structure/mirror{ - pixel_y = -28 +/obj/structure/table/glass, +/obj/item/weapon/towel, +/obj/item/weapon/towel{ + color = "#FFD700"; + name = "gold towel" }, -/obj/structure/sink{ - dir = 1 +/obj/item/weapon/towel{ + color = "#3fc0ea"; + name = "light blue towel"; + pixel_x = 2; + pixel_y = 4 + }, +/obj/item/device/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -22 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/toilet) -"uNL" = ( -/obj/structure/table/standard, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, -/obj/random/soap, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/toilet) "uOo" = ( @@ -21076,24 +21939,33 @@ /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) "vbK" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/effect/floor_decal/borderfloor{ dir = 1 }, /obj/effect/floor_decal/corner/brown/border{ dir = 1 }, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) "vcl" = ( /turf/simulated/wall/r_wall, /area/hallway/primary/thirddeck/aftportcentral) "vdi" = ( -/obj/effect/floor_decal/corner_steel_grid/full, -/turf/simulated/floor/tiled/dark, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) "vdm" = ( /obj/effect/floor_decal/corner_steel_grid{ @@ -21122,16 +21994,6 @@ }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/thirddeck/aftdoorm) -"vfb" = ( -/obj/machinery/alarm{ - frequency = 1441; - pixel_y = 22 - }, -/obj/effect/floor_decal/corner_steel_grid{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/hallway/primary/thirddeck/aftdoorm) "vfw" = ( /obj/machinery/lapvend, /obj/effect/floor_decal/corner_steel_grid{ @@ -21148,11 +22010,6 @@ }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/thirddeck/aftdoorm) -"vgG" = ( -/obj/machinery/floodlight, -/obj/structure/catwalk, -/turf/simulated/floor/plating, -/area/maintenance/thirddeck/dormsstarboard) "vhe" = ( /obj/structure/catwalk, /obj/item/weapon/storage/mre/random, @@ -21287,7 +22144,7 @@ /obj/machinery/door/firedoor/multi_tile/glass{ dir = 1 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftdoorm) "vkQ" = ( /obj/machinery/door/firedoor/glass, @@ -21561,7 +22418,7 @@ /obj/machinery/door/firedoor/multi_tile/glass{ dir = 1 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftdoorm) "vvy" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -21616,9 +22473,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) "vwy" = ( @@ -21627,6 +22482,9 @@ }, /obj/machinery/hologram/holopad, /obj/effect/floor_decal/industrial/outline/grey, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/hallway/primary/thirddeck/aftdoorm) "vwC" = ( @@ -21918,17 +22776,6 @@ /obj/effect/floor_decal/corner/beige/diagonal, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) -"vJa" = ( -/obj/structure/sign/directions/ladder_down{ - name = "\improper Down One Deck"; - pixel_y = -6 - }, -/obj/structure/sign/directions/eva, -/obj/structure/sign/directions/medical{ - pixel_y = 6 - }, -/turf/simulated/floor/reinforced/airless, -/area/thirddeck/roof) "vJc" = ( /obj/structure/bed/chair/office/dark{ dir = 1 @@ -22237,7 +23084,7 @@ dir = 1 }, /obj/machinery/door/firedoor/multi_tile/glass, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftdoorm) "vWX" = ( /turf/simulated/wall, @@ -22261,7 +23108,7 @@ dir = 1 }, /obj/machinery/door/firedoor/multi_tile/glass, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/steel_grid, /area/hallway/primary/thirddeck/aftdoorm) "vXG" = ( /obj/effect/floor_decal/borderfloor{ @@ -22482,6 +23329,13 @@ }, /turf/simulated/floor/reinforced/airless, /area/thirddeck/roof) +"wfu" = ( +/obj/machinery/firealarm{ + layer = 3.3; + pixel_y = 26 + }, +/turf/simulated/wall, +/area/crew_quarters/toilet) "wfR" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/border_only, @@ -22601,7 +23455,7 @@ /obj/effect/floor_decal/carpet{ dir = 4 }, -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "wiE" = ( /obj/structure/table/standard, @@ -22921,6 +23775,19 @@ /obj/random/snack, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_10) +"wwo" = ( +/obj/structure/toilet, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "wwM" = ( /obj/structure/table/standard, /obj/machinery/power/apc{ @@ -22983,7 +23850,7 @@ /obj/effect/floor_decal/carpet{ dir = 6 }, -/turf/simulated/floor/holofloor/carpet, +/turf/simulated/floor/carpet/retro_red, /area/crew_quarters/cafeteria) "wAW" = ( /obj/structure/table/bench/wooden, @@ -23004,6 +23871,18 @@ /area/maintenance/thirddeck/dormsaft{ name = "Third Deck Aft Maintenance" }) +"wCh" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/brown/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/hallway/primary/thirddeck/aftdoorm) "wCi" = ( /obj/random/toolbox, /turf/simulated/floor/plating, @@ -23020,6 +23899,25 @@ }, /turf/simulated/floor/plating, /area/maintenance/thirddeck/dormsstarboard) +"wDF" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "wDV" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ frequency = 1379; @@ -23196,6 +24094,13 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/crew_quarters/sleep/vistor_room_10) +"wLU" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "wMb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -23327,6 +24232,43 @@ /area/maintenance/thirddeck/dormsport{ name = "Third Deck Aft Port Maintenance" }) +"wQh" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/under/pants/yogapants, +/obj/item/clothing/under/pants/yogapants, +/obj/item/clothing/under/pants/yogapants, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/clothing/shoes/footwraps, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/item/weapon/towel/random{ + pixel_y = 8 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Gym Fore" + }, +/obj/effect/floor_decal/corner/green/border{ + dir = 1 + }, +/obj/item/clothing/shoes/footwraps/teshari, +/obj/item/clothing/shoes/footwraps/teshari, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "wQH" = ( /obj/structure/table/steel, /obj/random/maintenance/cargo, @@ -23353,10 +24295,13 @@ name = "Third Deck Aft Port Maintenance" }) "wRm" = ( -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/machinery/disposal/wall{ + dir = 1; + pixel_y = -35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_1) "wRo" = ( @@ -23434,6 +24379,9 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) +"wUl" = ( +/turf/simulated/floor/boxing/gym, +/area/crew_quarters/seconddeck/gym) "wUP" = ( /obj/structure/closet/secure_closet/personal/cabinet, /turf/simulated/floor/wood, @@ -23515,10 +24463,13 @@ /area/crew_quarters/sleep/vistor_room_4) "wYO" = ( /obj/machinery/light, -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/machinery/disposal/wall{ + dir = 1; + pixel_y = -35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_4) "wYT" = ( @@ -23573,13 +24524,16 @@ /area/crew_quarters/sleep/vistor_room_7) "xco" = ( /obj/machinery/light, -/obj/machinery/disposal, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/machinery/disposal/wall{ + dir = 1; + pixel_y = -35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_7) "xcw" = ( @@ -23756,10 +24710,13 @@ /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_10) "xjR" = ( -/obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/machinery/disposal/wall{ + dir = 1; + pixel_y = -35 + }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_10) "xkS" = ( @@ -23807,6 +24764,20 @@ }, /turf/simulated/floor/tiled, /area/hallway/primary/thirddeck/aftdoorm) +"xmc" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/crew_quarters/seconddeck/gym) "xmh" = ( /obj/machinery/door/airlock{ name = "Unisex Restrooms" @@ -23869,12 +24840,23 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/machinery/disposal/wall{ + dir = 8; + pixel_y = 0; + pixel_x = 35 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_6) +"xpa" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/camera/network/civilian{ + c_tag = "CIV - Library Office" + }, +/turf/simulated/floor/plating, +/area/maintenance/substation/dorms) "xpl" = ( /obj/machinery/door/airlock{ name = "Unisex Restrooms" @@ -24123,8 +25105,10 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/vistor_room_10) "xAP" = ( -/turf/simulated/wall, -/area/crew_quarters/coffee_shop) +/obj/machinery/door/firedoor/glass, +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/plating, +/area/crew_quarters/seconddeck/gym) "xBF" = ( /obj/structure/bed/chair/comfy/brown{ dir = 8 @@ -24166,6 +25150,19 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/vistor_room_10) +"xDk" = ( +/obj/structure/sign/directions/medical{ + pixel_y = 6 + }, +/obj/structure/sign/directions/eva, +/obj/structure/sign/directions/ladder_down{ + name = "\improper Down One Deck"; + pixel_y = -6 + }, +/turf/simulated/wall/r_wall, +/area/maintenance/thirddeck/dormsaft{ + name = "Third Deck Aft Maintenance" + }) "xDw" = ( /obj/random/soap, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -24278,6 +25275,21 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/sleep/vistor_room_1) +"xIE" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/obj/effect/floor_decal/carpet{ + dir = 4 + }, +/obj/effect/floor_decal/carpet{ + dir = 1 + }, +/obj/effect/floor_decal/carpet{ + dir = 5 + }, +/turf/simulated/floor/carpet, +/area/crew_quarters/seconddeck/gym) "xIR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -24844,6 +25856,16 @@ /obj/item/pizzavoucher, /turf/simulated/floor/wood, /area/crew_quarters/sleep/vistor_room_3) +"yed" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/toilet) "yeI" = ( /obj/effect/decal/cleanable/generic, /turf/simulated/floor/plating, @@ -38899,7 +39921,7 @@ apc apc apc apc -apc +aqj apc apc jhg @@ -38909,7 +39931,7 @@ jhg jhg apc apc -apc +aqj apc apc apc @@ -48219,7 +49241,7 @@ xes apc apc apc -epg +tHb aqj apc apc @@ -51517,8 +52539,8 @@ apc apc apc apc -jhg -jhg +vvI +vvI jhg jhg jhg @@ -54420,7 +55442,7 @@ rTn rTn sUG wzy -kGY +xpa tRV uoZ quN @@ -55958,19 +56980,19 @@ nCY hYd sSh tav -xvg +smF qWi qmA -xvg -xvg -xvg -xvg -dfh +smF +smF +smF +smF +bJT dnd -qWl -xvg -fhs -xvg +qxM +smF +bzb +smF wzy wxU aaM @@ -56747,7 +57769,7 @@ tUY wzy wzy wxU -uYk +fQw vkN wxU vWX @@ -57488,7 +58510,7 @@ iiZ iKs rhR fbp -fbp +cyo fbp kTs lsW @@ -57762,7 +58784,7 @@ oCE oCE pkC pDc -wzy +edc dfh qIj qYQ @@ -58541,12 +59563,12 @@ qkf qLf rbj rth -rYj +rUF skH suw suw sQc -nGl +pOe tno tAb tYA @@ -59052,18 +60074,18 @@ oNY oTP pmY pGV +pYa +pYa xAP -xAP -pXC -xAP -rul +sgN +oHo rYR -xAP +oql pXC pXC -xAP -xAP -tnz +pYa +pYa +aSu tCJ tZj tCJ @@ -59310,17 +60332,17 @@ oCE oCE pkC pGW -xAP -qmc -qLD +pYa +seR +qMu rbF rwO rZl smc -rHD -rHD -sRM -qmc +cwd +eUr +kHk +sAL tnz tCS uaQ @@ -59568,17 +60590,17 @@ oGh oUd poc pHw -xAP -qnz -qLF -rcR -rxM -saq -smo -smo -sFQ -qMu -sZg +pYa +sZu +rHJ +rdO +rEL +uiK +jGz +gno +xmc +iAN +hoi tnz tDd ucr @@ -59825,17 +60847,17 @@ jhg oOx oUk ppf -pIw -pXC -qmc -qLH -rcT -ryq -saz +tLN +xAP +uye +reN +tGH +ryK +gXC saz svm -sGT -sSm +xmc +jmU qmc tnz tDp @@ -60086,15 +61108,15 @@ ppf pII xAP qnV -qLD -rcT +reN +tGH ryK -sbH +spz sbH svw -sGT -qLD -sZu +xmc +xIE +tbb tnz tEC ucA @@ -60341,25 +61363,25 @@ oGh oPH oUT ppf -pIw -pXC -qmc -qLD -rcT -rHa -scA +tLN +xAP +wQh +reN +tGH +ryK scA +meR sxw -sGT -qLF -qmc +xmc +gno +sZg tnz tnz tnz tnz tnz wxU -vaD +rQm vum wxU vXe @@ -60602,21 +61624,21 @@ ppf pJf xAP qoi -qLM -rdo -rHt -rHt -rHt -rHt -sHv -qLD +reN +tGH +ryK +pLe +rYj +rYj +rdD +ajO tad tpf -tFI +tMI udn -uFi +uee uMG -wxU +tpf vbK vvy vNs @@ -60858,27 +61880,27 @@ oGh oWv ppf pKB -xAP +pYa qph -qMu -rdD -rHD -rHD -rHD -sAa -sHN -qLD +aNp +fGq +rxM +sHv +ikQ +agw +wLU +rLC tao -tpf -tGp -uee -tpf -tpf -wxU -dQi +sGT +eta +rvn +uFJ +gkA +mbQ +fLj vvH vPu -vXG +wCh aaM wKP vPu @@ -60888,7 +61910,7 @@ vXG yaQ gig wKP -vPu +rcR vXG rZr wKP @@ -61115,25 +62137,25 @@ jhg oOx oXS ppK -pJf -xAP +dOD +qQC qpl -qLF -rdO -rHG +tGU +tGU +tGU sdS smy -sAc -sIA -qMu +pMP +ryq +wDF tat tpf -tGU -ueI -uFJ -uNb -wxU -uYm +tGp +uee +qvB +uMG +tpf +tnF vik wxU vXU @@ -61372,25 +62394,25 @@ lJt jhg oOx oUk -ppf +nTn pIw -xAP +sSm qpo qLD -rdO -rHG -sev -smF -sAc -sIA qLD -qmc -tpf -tHX -uee +qLD +qja +rMh +gVj +sSm +ndI +pYa tpf tpf -wxU +tpf +kll +fNe +dIE vdi vvM vPX @@ -61629,27 +62651,27 @@ odB lJt jhg oGh -oYt +brm pqT pKH -xAP +irZ qru qLH -rdO +rul rHG -seR -soQ -sAc -sIA -qLD -tbb +rHt +sra +atT +tfQ +lxh +kpZ tpf tIi ueI -uFJ +rKc uNb -wxU -vdm +tpf +qQg vvM vRg vXU @@ -61888,25 +62910,25 @@ lJt jhg oOx oUk -ppf -pLV -pYa -qmc -qLD -rdO -rHG -sgm -spk -sAc +nTn +pUj +xAP +pQQ +wUl +wUl +rcU +rHt +sra +atT sIA -qLF -qmc -tpf -tIF -uhb +mFQ +mFQ tpf tpf -wxU +tpf +lby +yed +tpf veo vvN vRq @@ -62146,25 +63168,25 @@ osR jhg oOx oYt -ppf -pMP -pYq +nTn +rcT +pYa qrz -qPR -reA -rKc -rKc -rKc -rKc +wUl +sTu +rcU +mNv +hKY +pYa sJA -sSn -tci -tpm +hCK +hCK +tpf tIP uiC uFP uNJ -wxU +tpf vez vwy vRw @@ -62403,27 +63425,27 @@ jbO sEn sEn sEn -oUk -ppf -pNe +nNF +nTn +pUj +pYa +sev +wUl +wUl +rcU +sha +jWM pYa -qmc -qLF -rdO -rLC -rHD -spz -sAL sJF -qLD -ted +hCK +hCK tpf -tJT -uiK -uee -uNL -wxU -vfb +tpf +tpf +rHD +rZO +tpf +vdm vwH vSz vXU @@ -62664,23 +63686,23 @@ sEn oZi prA pOU -xAP -xAP -qQg +pYa +fYj +sgm rgj -rMh -sgq -xAP -xAP -sJM -sTu -sJM +rcU +mCK +jQs +pYa +tfk +hCK +hCK tpf -tMI +wwo uju -uGK -uNJ -wxU +rQi +tFI +tpf vdm vxI vSI @@ -62922,23 +63944,23 @@ sEn pbl prP pPL -xAP +pYa qtx -qQv -rgy -rOA +wUl +wUl +rcU sha -sqj -xAP +sra +atT sKt -qwl +sma tew tpf +wfu tpf -ujw +ucG tpf tpf -wxU vfw vyl vSL @@ -63175,28 +64197,28 @@ iDw nCz ojq owk -kfL +qLM oQe pbI prU pRL -pYv -qvB -qQC -rgO -rOZ -sha -sra xAP +pQQ +aBx +wUl +rcU +rgy +sra +atT +eJB +spk sLg -qwl -tfk tpf tOU ujU uIm uOo -wxU +tpf vfQ vyu vTu @@ -63438,21 +64460,21 @@ sEn pdz prX pTi -pZq -pZq -pZq -pZq -rQi -sha +pYa +iCa +kQk +iCa +rcU +nSE srK -xAP +pYa sLp -rjS +sgq sLM tpf tOU -uks uee +uks uOo tBw qaU @@ -63697,23 +64719,23 @@ oYt psu pUj qaU -qvK -qQY -pZq -rQm +qaU +qaU +qaU +qaU shU -srV -xAP -sLM -qwl -tfQ -tpf +qaU +qaU +qaU +qaU +qaU +tBw tOU ukQ uIt uOo tBw -vgG +qwl vAp vTE vYr @@ -63953,28 +64975,28 @@ njY oGh pef psu -pUP -qbV +pLV +qaU +qTC +pZq +smo +rOA qwl +tci +sAc +pYv qRa pZq -pZq -pZq -pZq -pZq +qaU +qaU qaU qbV qaU -tBw -tBw -tBw -tBw -tBw -tBw +qaU vhe qwl rQK -qaU +qTC qaU shV shV @@ -64131,7 +65153,7 @@ xeL epg aqj aqj -apc +aqj jhg jhg jhg @@ -64211,11 +65233,11 @@ njY oGh oYt psu -pUj -qaU +oTG +qbV qwG qwl -rjS +qwl rQK rjS rjS @@ -64232,11 +65254,11 @@ uSU rjS rjS qRa +xpu qaU jhg jhg jhg -jhg qaU xRv yeI @@ -64244,7 +65266,7 @@ bRW ydk mhi wzA -wzA +xDk wjn wzA wzA @@ -64471,8 +65493,8 @@ oUk psu pWI qaU -qaU -qaU +fzX +qQv qaU qaU shV @@ -64491,7 +65513,7 @@ qaU qaU qaU qaU -jhg +qaU jhg jhg jhg @@ -64729,9 +65751,9 @@ peN puR pWK oGh -jhg -jhg -vvI +qaU +qaU +qaU apc apc apc @@ -64932,7 +65954,7 @@ jhg apc apc apc -apc +aqj apc apc qjy @@ -65504,7 +66526,7 @@ jhg jhg jhg jhg -vJa +jhg apc apc apc @@ -67062,7 +68084,7 @@ jhg apc apc apc -apc +tHb apc apc apc @@ -67317,10 +68339,10 @@ jhg jhg jhg jhg -apc -apc -apc -apc +aqj +aqj +aqj +htn apc apc apc @@ -72676,7 +73698,7 @@ jhg jhg jhg jhg -jhg +vvI jhg jhg jhg @@ -73711,7 +74733,7 @@ aqj aqj aqj aqj -apc +aqj jhg jhg jhg @@ -75772,7 +76794,7 @@ jhg jhg jhg jhg -jhg +vvI jhg jhg jhg @@ -76593,7 +77615,7 @@ apc apc aqj apc -apc +aqj apc apc apc @@ -76851,7 +77873,7 @@ epg epg epg htn -apc +aqj apc apc apc diff --git a/maps/southern_cross/southern_cross-5.dmm b/maps/southern_cross/southern_cross-5.dmm index f671ff3b99..70bfc1494d 100644 --- a/maps/southern_cross/southern_cross-5.dmm +++ b/maps/southern_cross/southern_cross-5.dmm @@ -1242,6 +1242,7 @@ d2 = 2; icon_state = "1-2" }, +/mob/living/simple_mob/animal/passive/mouse/mining, /turf/simulated/floor/tiled/steel_dirty, /area/surface/outpost/mining_main/uxstorage) "dH" = ( @@ -1469,55 +1470,6 @@ /turf/simulated/floor/plating, /area/surface/outpost/main/airlock/right_two) "ej" = ( -/obj/machinery/computer/crew, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 9 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 9 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/alarm{ - frequency = 1441; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/white, -/area/surface/outpost/main/search_and_rescue) -"ek" = ( -/obj/effect/floor_decal/steeldecal/steel_decals10, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 1 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 1 - }, -/obj/structure/window/reinforced{ - dir = 1; - health = 1e+006; - req_access = list(5) - }, -/obj/structure/table/rack, -/obj/item/weapon/storage/belt/medical/emt, -/obj/item/weapon/storage/belt/medical/emt, -/obj/item/weapon/storage/belt/medical/emt, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/southleft{ - req_access = list(5); - req_one_access = list(5,43) - }, -/turf/simulated/floor/tiled/white, -/area/surface/outpost/main/search_and_rescue) -"el" = ( /obj/machinery/sleep_console{ dir = 4 }, @@ -1527,9 +1479,12 @@ /obj/effect/floor_decal/corner/paleblue/border{ dir = 1 }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled/steel_grid, /area/surface/outpost/main/search_and_rescue) -"em" = ( +"ek" = ( /obj/machinery/sleeper{ dir = 4 }, @@ -1541,11 +1496,79 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/surface/outpost/main/search_and_rescue) -"en" = ( -/obj/structure/table/glass, +"el" = ( /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 8 }, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/roller{ + pixel_x = 8; + pixel_y = 1 + }, +/obj/item/roller{ + pixel_x = 8; + pixel_y = 9 + }, +/obj/item/roller{ + pixel_x = -8; + pixel_y = 1 + }, +/obj/item/roller{ + pixel_x = -8; + pixel_y = 9 + }, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/main/search_and_rescue) +"em" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/effect/floor_decal/corner/paleblue/border{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/item/weapon/storage/firstaid/regular{ + pixel_x = -5; + pixel_y = -5 + }, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/main/search_and_rescue) +"en" = ( +/obj/structure/table/glass, /obj/effect/floor_decal/borderfloorwhite{ dir = 1 }, @@ -1555,14 +1578,14 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/item/bodybag, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/weapon/storage/box/bodybags, /obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{ pixel_x = 7; pixel_y = 1 }, -/obj/structure/window/reinforced{ - dir = 8 - }, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "eo" = ( @@ -2008,45 +2031,42 @@ d2 = 4; icon_state = "0-4" }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/surface/outpost/main/search_and_rescue) "fe" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloorwhite{ - dir = 8 - }, -/obj/effect/floor_decal/corner/paleblue/border{ - dir = 8 - }, /obj/structure/cable/blue{ d1 = 2; d2 = 8; icon_state = "2-8" }, +/obj/effect/floor_decal/corner_steel_grid{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "ff" = ( -/obj/effect/floor_decal/steeldecal/steel_decals10{ - dir = 4 +/obj/effect/floor_decal/corner_steel_grid{ + dir = 5 }, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "fg" = ( -/obj/effect/floor_decal/corner_steel_grid{ - dir = 5 +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 }, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "fh" = ( -/obj/effect/floor_decal/corner_steel_grid{ - dir = 5 +/obj/effect/floor_decal/industrial/warning/corner, +/obj/structure/bed/chair/office/light{ + dir = 8 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "fi" = ( @@ -2056,14 +2076,14 @@ /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 1 }, -/obj/machinery/door/window/westleft{ +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/westleft{ name = "Medical Supplies"; req_access = null; req_one_access = list(5,43) }, -/obj/effect/floor_decal/steeldecal/steel_decals10{ - dir = 8 - }, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "fj" = ( @@ -2157,7 +2177,9 @@ icon_state = "0-8" }, /obj/machinery/shieldwallgen{ - req_access = list(43) + anchored = 1; + req_access = list(1,43); + state = 1 }, /turf/simulated/floor/tiled, /area/surface/outpost/main/exploration/containment) @@ -2498,6 +2520,12 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/floor_decal/borderfloorwhite/corner2{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/bordercorner2{ + dir = 8 + }, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "gc" = ( @@ -2518,10 +2546,9 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/structure/table/glass, -/obj/item/clothing/accessory/stethoscope, -/obj/item/device/defib_kit/loaded, -/obj/item/device/defib_kit/compact/loaded, +/obj/machinery/computer/crew{ + dir = 4 + }, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "gg" = ( @@ -2541,6 +2568,7 @@ /obj/machinery/atmospherics/pipe/simple/visible, /obj/item/weapon/reagent_containers/blood/OPlus, /obj/item/weapon/reagent_containers/blood/OPlus, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "gh" = ( @@ -3125,19 +3153,19 @@ /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "hn" = ( -/obj/structure/table/glass, /obj/structure/window/reinforced{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/item/weapon/tool/wrench, -/obj/item/bodybag/cryobag, -/obj/item/bodybag/cryobag, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/table/glass, +/obj/item/clothing/accessory/stethoscope, +/obj/item/device/defib_kit/loaded, +/obj/item/device/defib_kit/compact/loaded, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "ho" = ( @@ -3190,7 +3218,7 @@ "ht" = ( /obj/structure/closet/secure_closet{ name = "hunting locker"; - req_one_access = list(43) + req_one_access = list(1,43) }, /obj/item/weapon/gun/energy/netgun, /obj/item/weapon/beartrap/hunting, @@ -3495,17 +3523,17 @@ /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "ig" = ( -/obj/machinery/door/window/westleft{ - name = "Medical Supplies"; - req_access = null; - req_one_access = list(5,43) - }, /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 1 }, /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 8 }, +/obj/machinery/door/window/brigdoor/westleft{ + name = "Medical Supplies"; + req_access = null; + req_one_access = list(5,43) + }, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "ih" = ( @@ -3518,12 +3546,6 @@ /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "ii" = ( -/obj/structure/table/glass, -/obj/item/weapon/storage/firstaid/adv{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/weapon/storage/firstaid/o2, /obj/effect/floor_decal/borderfloorwhite{ dir = 4 }, @@ -3537,6 +3559,29 @@ c_tag = "MO - Search and Rescue Starboard"; dir = 8 }, +/obj/structure/window/reinforced{ + health = 1e+006; + req_access = list(5) + }, +/obj/structure/table/rack, +/obj/item/weapon/storage/belt/medical/emt, +/obj/item/weapon/storage/belt/medical/emt, +/obj/item/weapon/storage/belt/medical/emt, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/southleft{ + dir = 8; + name = "EMT Supplies"; + req_access = list(5); + req_one_access = list(5,43) + }, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "ij" = ( @@ -3604,7 +3649,7 @@ "ir" = ( /obj/structure/closet/secure_closet{ name = "hunting locker"; - req_one_access = list(43) + req_one_access = list(1,43) }, /obj/item/weapon/gun/energy/netgun, /obj/item/weapon/beartrap/hunting, @@ -3981,35 +4026,63 @@ /obj/effect/floor_decal/corner/paleblue/border, /obj/effect/floor_decal/borderfloorwhite/corner2, /obj/effect/floor_decal/corner/paleblue/bordercorner2, -/obj/structure/closet/l3closet/scientist, /obj/structure/window/reinforced{ dir = 8 }, +/obj/structure/closet/l3closet/scientist, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "jb" = ( -/obj/structure/table/glass, /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, -/obj/item/roller, -/obj/item/roller{ - pixel_y = 8 - }, -/turf/simulated/floor/tiled/white, -/area/surface/outpost/main/search_and_rescue) -"jc" = ( /obj/structure/table/glass, /obj/item/weapon/storage/firstaid/toxin{ pixel_x = 5; pixel_y = 5 }, -/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/toxin{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/fire{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/fire{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/weapon/storage/firstaid/o2{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/weapon/storage/firstaid/o2{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/item/weapon/storage/firstaid/adv{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/item/weapon/storage/firstaid/adv{ + pixel_x = -5; + pixel_y = -5 + }, +/turf/simulated/floor/tiled/white, +/area/surface/outpost/main/search_and_rescue) +"jc" = ( +/obj/structure/table/glass, /obj/effect/floor_decal/borderfloorwhite{ dir = 6 }, /obj/effect/floor_decal/corner/paleblue/border{ dir = 6 }, +/obj/item/weapon/tool/wrench, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag, /turf/simulated/floor/tiled/white, /area/surface/outpost/main/search_and_rescue) "jd" = ( @@ -4833,6 +4906,9 @@ /area/surface/outside/plains/mountains) "kL" = ( /obj/machinery/power/port_gen/pacman, +/obj/machinery/camera/network/engineering_outpost{ + c_tag = "ENG - Mining Outpost Power 2" + }, /turf/simulated/floor/plating, /area/surface/outpost/engineering/atmos_room) "kN" = ( @@ -5209,7 +5285,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/multi_tile/metal{ name = "Fauna Containment"; - req_one_access = list(43,1) + req_one_access = list(1,43) }, /obj/machinery/door/firedoor/multi_tile/glass, /obj/effect/floor_decal/steeldecal/steel_decals_central1{ @@ -5965,6 +6041,9 @@ /area/surface/outpost/main/corridor/right_upper) "mR" = ( /obj/machinery/telecomms/relay/preset/southerncross/wild, +/obj/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/tiled/techmaint, /area/surface/outpost/main/tcomm) "mS" = ( @@ -7430,6 +7509,7 @@ /obj/item/stack/material/copper{ amount = 25 }, +/obj/machinery/light/small, /turf/simulated/floor/plating, /area/surface/outpost/engineering/atmos_room) "pc" = ( @@ -14563,6 +14643,13 @@ }, /turf/simulated/floor/tiled, /area/surface/outpost/main/airlock/left_one) +"Bu" = ( +/obj/machinery/power/port_gen/pacman, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/surface/outpost/engineering/atmos_room) "Bv" = ( /obj/structure/bed/chair{ dir = 1 @@ -19226,6 +19313,9 @@ /obj/structure/table/steel, /obj/random/junk, /obj/random/maintenance/engineering, +/obj/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/surface/outpost/main/gen_room) "Ks" = ( @@ -65768,7 +65858,7 @@ gO hM iH bO -kL +Bu lW nE pi @@ -77112,7 +77202,7 @@ Tg Tg Tg Tg -do +dp ej fe gb @@ -77888,7 +77978,7 @@ UX UX dp em -fh +ge ge hm if @@ -78144,7 +78234,7 @@ UX UX UX UX -dp +do en fi gf @@ -78405,7 +78495,7 @@ UX do eo fj -ge +fh ho ih jb diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm index df41e87efc..7af01a8044 100644 --- a/maps/southern_cross/southern_cross-6.dmm +++ b/maps/southern_cross/southern_cross-6.dmm @@ -91,9 +91,7 @@ /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology) "ag" = ( -/obj/machinery/computer/area_atmos{ - dir = 1 - }, +/obj/machinery/computer/area_atmos, /turf/simulated/floor/tiled/white, /area/surface/outpost/research/xenoarcheology/anomaly) "ah" = ( @@ -238,6 +236,8 @@ /obj/machinery/camera/network/research_outpost{ c_tag = "OPR - Xenoarchaeology SMES" }, +/obj/item/weapon/airlock_electronics, +/obj/item/weapon/airlock_electronics, /turf/simulated/floor/plating, /area/surface/outpost/research/xenoarcheology/smes) "bR" = ( @@ -402,6 +402,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology/anomaly) +"fc" = ( +/turf/simulated/mineral/floor/ignore_mapgen/sif, +/area/surface/outpost/research/xenoarcheology/exterior) "fn" = ( /turf/simulated/wall/r_wall, /area/surface/outpost/research/xenoarcheology/anomaly) @@ -417,6 +420,12 @@ /obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor/plating, /area/surface/outpost/research/xenoarcheology/anomaly) +"fK" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/mineral/floor/ignore_mapgen/sif, +/area/surface/outpost/research/xenoarcheology/exterior) "fN" = ( /turf/simulated/wall/r_wall, /area/surface/outpost/research/xenoarcheology/longtermstorage) @@ -459,6 +468,11 @@ }, /turf/simulated/floor/plating, /area/surface/outpost/research/xenoarcheology/exp_prep) +"gz" = ( +/turf/simulated/floor/plating{ + icon_state = "asteroidplating2" + }, +/area/surface/outpost/research/xenoarcheology/exterior) "gH" = ( /obj/effect/floor_decal/industrial/warning{ dir = 10 @@ -526,6 +540,9 @@ "hN" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology/anomaly) "hO" = ( @@ -778,8 +795,18 @@ /turf/simulated/floor/tiled/white, /area/surface/outpost/research/xenoarcheology) "kN" = ( -/turf/simulated/mineral/floor/ignore_mapgen/sif, -/area/surface/outpost/mining_main/cave) +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Outpost Maintenance Hatch"; + normalspeed = 0; + req_one_access = list(1,5,10,12,31,47,48,50) + }, +/obj/structure/cable/heavyduty{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating2" + }, +/area/surface/outpost/research/xenoarcheology/exterior) "kO" = ( /obj/machinery/atmospherics/unary/heater{ dir = 1 @@ -1190,6 +1217,10 @@ }, /turf/simulated/floor/tiled/white, /area/surface/outpost/research/xenoarcheology) +"op" = ( +/obj/effect/zone_divider, +/turf/simulated/mineral/floor/ignore_mapgen/sif, +/area/surface/outpost/research/xenoarcheology/exterior) "os" = ( /obj/structure/table/steel, /obj/machinery/cell_charger, @@ -1255,6 +1286,19 @@ }, /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology/anomaly) +"oZ" = ( +/obj/structure/table/steel, +/obj/item/weapon/storage/box/lights/bulbs{ + pixel_y = 5 + }, +/obj/item/weapon/storage/toolbox/emergency{ + pixel_y = 3; + starts_with = list(/obj/item/weapon/tool/crowbar/red,/obj/item/weapon/extinguisher/mini,/obj/item/device/radio,/obj/item/weapon/light/bulb) + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating2" + }, +/area/surface/outpost/research/xenoarcheology/exterior) "pb" = ( /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology/anomaly) @@ -1412,6 +1456,7 @@ dir = 1; pixel_y = -24 }, +/obj/machinery/light, /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology/exp_prep) "rz" = ( @@ -1464,6 +1509,10 @@ /obj/effect/zone_divider, /turf/simulated/mineral/sif, /area/surface/cave/unexplored/normal) +"rT" = ( +/obj/machinery/light/small, +/turf/simulated/mineral/floor/ignore_mapgen/sif, +/area/surface/outpost/research/xenoarcheology/exterior) "rX" = ( /obj/structure/table/rack{ dir = 8; @@ -2070,6 +2119,9 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 30 }, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/surface/outpost/research/xenoarcheology/smes) "yP" = ( @@ -2156,6 +2208,11 @@ }, /turf/simulated/floor/tiled/asteroid_steel, /area/surface/outpost/mining_main/cave) +"zy" = ( +/obj/effect/zone_divider, +/obj/item/stack/flag/green, +/turf/simulated/mineral/floor/ignore_mapgen/sif, +/area/surface/cave/explored/normal) "zI" = ( /obj/machinery/atmospherics/valve/digital/open{ dir = 4 @@ -2401,6 +2458,20 @@ }, /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology/anomaly) +"CS" = ( +/obj/structure/cable/heavyduty{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating2" + }, +/area/surface/outpost/research/xenoarcheology/exterior) "CV" = ( /obj/machinery/status_display{ pixel_y = -32 @@ -2463,10 +2534,10 @@ /turf/simulated/floor/reinforced, /area/surface/outpost/research/xenoarcheology/isolation_a) "Ec" = ( -/obj/item/stack/flag/green, /obj/effect/zone_divider, +/obj/item/stack/flag/green, /turf/simulated/mineral/floor/ignore_mapgen/sif, -/area/surface/cave/explored/normal) +/area/surface/cave/explored/deep) "Em" = ( /obj/structure/bed/chair/office/light, /obj/machinery/power/apc{ @@ -2642,6 +2713,14 @@ /obj/structure/table/steel, /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology/exp_prep) +"FR" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating2" + }, +/area/surface/outpost/research/xenoarcheology/exterior) "FV" = ( /obj/machinery/artifact_scanpad, /turf/simulated/floor/tiled/white, @@ -2733,10 +2812,13 @@ /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology/anomaly) "GX" = ( +/obj/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating{ icon_state = "asteroidplating2" }, -/area/surface/cave/explored/normal) +/area/surface/outpost/research/xenoarcheology/exterior) "GY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/blue{ @@ -3155,6 +3237,9 @@ icon_state = "1-2"; id = "surface_cave" }, +/obj/structure/cable/heavyduty{ + icon_state = "1-4" + }, /turf/simulated/floor/plating{ icon_state = "asteroidplating2" }, @@ -3608,6 +3693,14 @@ }, /turf/simulated/floor/tiled/white, /area/surface/outpost/research/xenoarcheology) +"RK" = ( +/obj/structure/cable/heavyduty{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating2" + }, +/area/surface/outpost/mining_main/cave) "RV" = ( /obj/effect/map_effect/portal/master/side_b/caves_to_plains{ dir = 1 @@ -3627,7 +3720,7 @@ "Sh" = ( /obj/item/weapon/banner/nt, /turf/simulated/mineral/floor/ignore_mapgen/sif, -/area/surface/cave/explored/normal) +/area/surface/outpost/research/xenoarcheology/exterior) "Sn" = ( /obj/structure/cable/blue{ d1 = 4; @@ -3807,6 +3900,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, +/obj/machinery/light, /turf/simulated/floor/tiled/white, /area/surface/outpost/research/xenoarcheology) "TN" = ( @@ -4017,7 +4111,7 @@ /turf/simulated/floor/plating{ icon_state = "asteroidplating2" }, -/area/surface/cave/explored/normal) +/area/surface/outpost/research/xenoarcheology/exterior) "Yg" = ( /obj/effect/map_effect/portal/line/side_b{ dir = 1 @@ -4090,6 +4184,12 @@ }, /turf/simulated/floor/tiled, /area/surface/outpost/research/xenoarcheology/anomaly) +"YE" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/mineral/floor/ignore_mapgen/sif, +/area/surface/outpost/research/xenoarcheology/exterior) "YG" = ( /turf/simulated/wall/r_wall, /area/surface/outpost/research/xenoarcheology/medical) @@ -4178,6 +4278,12 @@ icon_state = "asteroidplating2" }, /area/surface/outpost/mining_main/cave) +"Zw" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/mineral/floor/ignore_mapgen/sif, +/area/surface/outpost/research/xenoarcheology/exterior) "Zy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 4 @@ -16224,7 +16330,7 @@ nu nu nu nu -nu +bE nu nu nu @@ -16727,7 +16833,7 @@ iy iy iy iy -nu +bE nu nu nu @@ -17010,7 +17116,7 @@ nu nu nu nu -nu +bE iy iy iy @@ -17256,7 +17362,7 @@ iy iy iy iy -nu +bE nu nu nu @@ -17503,7 +17609,7 @@ nu nu nu nu -nu +bE iy iy iy @@ -17782,7 +17888,7 @@ nu nu nu nu -nu +bE nu nu nu @@ -18782,7 +18888,7 @@ iy iy iy iy -nu +bE nu nu nu @@ -19083,7 +19189,7 @@ nu nu YT nu -nu +bE iy iy iy @@ -19558,7 +19664,7 @@ nu nu nu nu -nu +bE iy iy iy @@ -19622,7 +19728,7 @@ iy iy iy nu -nu +bE nu nu nu @@ -19854,7 +19960,7 @@ iy iy iy iy -nu +bE YT nu nu @@ -20396,7 +20502,7 @@ nu nu nu nu -nu +bE iy iy iy @@ -20578,7 +20684,7 @@ HQ HQ HQ HQ -YT +Ec YT YT YT @@ -20686,7 +20792,7 @@ BO BO BO BO -BO +zy rM rM rM @@ -20900,7 +21006,7 @@ nu nu nu nu -nu +bE nu nu nu @@ -21352,7 +21458,7 @@ nu nu nu nu -nu +bE nu iy iy @@ -21417,7 +21523,7 @@ nu nu nu nu -nu +bE iy iy iy @@ -21854,7 +21960,7 @@ iy iy iy iy -nu +bE YT nu nu @@ -21983,8 +22089,8 @@ Hp mI mI mI -Ec -Hp +BO +sb Hp Hp Hp @@ -21996,7 +22102,7 @@ mI mI Hp Hp -Hp +sb Hp Hp Hp @@ -22234,7 +22340,7 @@ Hp Hp Hp Hp -Hp +sb Hp Hp mI @@ -22742,7 +22848,7 @@ mI mI mI mI -Hp +sb Hp Hp Hp @@ -22770,7 +22876,7 @@ mI mI mI Hp -Hp +sb Hp Hp Hp @@ -22886,7 +22992,7 @@ nu nu nu nu -nu +bE HQ iy iy @@ -23518,7 +23624,7 @@ Hp Hp Hp Hp -Hp +sb mI mI mI @@ -23648,7 +23754,7 @@ iy iy iy iy -nu +bE nu nu nu @@ -24423,7 +24529,7 @@ nu nu nu nu -nu +bE iy iy iy @@ -25184,7 +25290,7 @@ nu nu nu nu -nu +bE nu nu nu @@ -25959,7 +26065,7 @@ nu nu nu nu -nu +bE nu iy iy @@ -27359,7 +27465,7 @@ iy nu nu nu -nu +bE nu nu nu @@ -29497,7 +29603,7 @@ mI Hp Hp Hp -Hp +sb Hp Hp mI @@ -30011,7 +30117,7 @@ mI mI mI mI -Hp +sb Hp Hp Hp @@ -30535,22 +30641,22 @@ Hp Hp Hp Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc cv Uz Uz @@ -30792,30 +30898,30 @@ mI mI Hp Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc Yd -Hp -Hp -Hp -Hp -Hp -kN +fc +fc +fc +fc +fc +RK qq Zt uY @@ -31049,31 +31155,31 @@ Hp mI mI mI -mI -mI -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -mI -Hp -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc Yd -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc uY +RK uY Zt uY @@ -31307,31 +31413,31 @@ Hp Hp mI mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI +fc +fc +fc +fK +fc +fc +fc +fc +fc +fc +fc +fK Sh Cg Cg Cg Sh -Hp +fK Yd -Hp -Hp -Hp -Hp -Hp -kN +fc +fc +fc +fc +fc +RK Dj Zt uY @@ -31564,9 +31670,9 @@ Hp Hp Hp mI -mI -mI -mI +fc +fc +fc RW RW RW @@ -31589,7 +31695,7 @@ NW NW NW NW -XI +kN XI Yg XI @@ -31822,8 +31928,8 @@ Hp Hp Hp mI -mI -Hp +fc +fc RW RW Se @@ -31847,7 +31953,7 @@ KX kV NW NW -mI +Yd jP SY ns @@ -32078,10 +32184,10 @@ mI mI Hp Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc cH oe mv @@ -32105,7 +32211,7 @@ NQ NQ dA NW -mI +Yd jP SY ns @@ -32335,11 +32441,11 @@ mI mI mI Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +rT RW rp uo @@ -32363,8 +32469,8 @@ jf Fq mj NW -mI -mI +Yd +oZ mI ns "} @@ -32592,12 +32698,12 @@ mI mI mI Hp -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc RW gc Fi @@ -32621,8 +32727,8 @@ Dv Tf OA NW -mI -mI +CS +gz mI ns "} @@ -32850,12 +32956,12 @@ mI mI Hp Hp -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc RW gm uo @@ -32879,8 +32985,8 @@ MI lf pO NW -mI -mI +FR +gz mI ns "} @@ -33108,12 +33214,12 @@ mI mI sb Hp -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc cH gp iv @@ -33137,8 +33243,8 @@ Kx sK CV NW -mI -mI +fc +fc mI ns "} @@ -33366,9 +33472,9 @@ mI mI Hp Hp -Hp -Hp -Hp +fc +fc +fc bF bF bF @@ -33395,8 +33501,8 @@ eo kx DD NW -mI -mI +fc +fc mI ns "} @@ -33624,9 +33730,9 @@ mI Hp Hp Hp -Hp -Hp -Hp +fc +fc +fc bR bY AC @@ -33653,8 +33759,8 @@ cL cL NW NW -mI -mI +fc +fc mI ns "} @@ -33882,9 +33988,9 @@ Hp Hp Hp Hp -Hp -Hp -Hp +fc +fc +fc bR bR hq @@ -33910,9 +34016,9 @@ WQ lI NA tC -mI -mI -mI +fc +fc +fc mI ns "} @@ -34140,9 +34246,9 @@ mI Hp Hp sb -Hp -Hp -Hp +fc +fc +fc bU bU aa @@ -34168,9 +34274,9 @@ Ic LU pS tC -mI -mI -mI +Zw +fc +fc mI ns "} @@ -34398,9 +34504,9 @@ Hp Hp mI mI -Hp -Hp -Hp +fc +fc +fc bU cf AC @@ -34426,9 +34532,9 @@ Gn hW iD tC -mI -mI -mI +fc +fc +fc mI ns "} @@ -34656,9 +34762,9 @@ Hp mI mI mI -Hp -Hp -Hp +fc +fc +fc bR bY AC @@ -34685,8 +34791,8 @@ cL cL VW VW -mI -mI +fc +fc mI ns "} @@ -34914,9 +35020,9 @@ mI mI mI mI -Hp -Hp -Hp +fc +fc +fc bF bF bF @@ -34943,8 +35049,8 @@ ai LV XL VW -mI -mI +fc +fc mI ns "} @@ -35172,12 +35278,12 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc fE hD iF @@ -35201,8 +35307,8 @@ NY Eu pF Hg -Hp -mI +fc +fc mI ns "} @@ -35430,12 +35536,12 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +rT fn hH iG @@ -35459,8 +35565,8 @@ Od Ir BH VW -Hp -Hp +Zw +fc mI ns "} @@ -35688,12 +35794,12 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc fn hN ja @@ -35717,8 +35823,8 @@ Gg ap sD VW -Hp -Hp +fc +fc mI ns "} @@ -35946,12 +36052,12 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc fE hR jq @@ -35975,8 +36081,8 @@ Hv pU PE Hg -Hp -Hp +fc +fc mI ns "} @@ -36204,12 +36310,12 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc fN hU jF @@ -36233,8 +36339,8 @@ bV oN Gp VW -Hp -Hp +fc +fc mI ns "} @@ -36462,12 +36568,12 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc fN ie jI @@ -36491,8 +36597,8 @@ Ce pU Op VW -Hp -Hp +fc +fc mI ns "} @@ -36721,11 +36827,11 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc fN il jN @@ -36749,8 +36855,8 @@ Kv Jr Jr KF -Hp -Hp +fc +fc mI ns "} @@ -36979,11 +37085,11 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +rT fN it jQ @@ -37007,8 +37113,8 @@ OP sv jE KF -Hp -Hp +Zw +fc mI ns "} @@ -37237,11 +37343,11 @@ rM rM rM rM -BO -BO -BO -BO -BO +op +op +op +op +op fN fN jV @@ -37265,8 +37371,8 @@ Fj Cr KF KF -rM -BO +op +op rM ax "} @@ -37496,11 +37602,11 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc fN fN fN @@ -37522,9 +37628,9 @@ KF KF KF KF -mI -mI -mI +fc +fc +fc mI ns "} @@ -37755,34 +37861,34 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +YE +fc +fc +fc +fc +fc +fc GX +gz +gz +gz GX -GX -GX -GX -Hp -Hp -Hp -Hp -mI -mI -mI -mI -mI -mI -mI +fc +fc +fc +fc +fc +fc +YE +fc +fc +fc +fc mI ns "} @@ -38014,33 +38120,33 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -mI -mI -mI -mI -mI +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc mI ns "} @@ -38273,22 +38379,22 @@ mI mI mI mI -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp -Hp +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc +fc mI mI mI @@ -38505,45 +38611,45 @@ mI mI mI mI -Hp -Hp -Hp -Hp -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI -mI +sb Hp Hp Hp mI mI -Hp -Hp +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +mI +fc +fc +fc +mI +mI +fc +fc mI mI mI @@ -39280,7 +39386,7 @@ mI mI Hp Hp -Hp +sb mI mI mI @@ -42609,7 +42715,7 @@ Hp Hp Hp Hp -Hp +sb Hp Hp Hp @@ -43381,7 +43487,7 @@ mI mI mI mI -Hp +sb Hp Hp Hp @@ -49065,7 +49171,7 @@ mI mI mI mI -Hp +sb Hp Hp Hp @@ -49283,7 +49389,7 @@ iy iy iy iy -nu +bE nu nu nu @@ -49827,7 +49933,7 @@ mI mI mI mI -Hp +sb Hp Hp Hp @@ -50057,7 +50163,7 @@ nu nu nu nu -nu +bE nu nu nu @@ -50098,7 +50204,7 @@ Hp Hp Hp Hp -Hp +sb mI mI mI @@ -50343,7 +50449,7 @@ Hp Hp Hp Hp -Hp +sb Hp Hp Hp @@ -51839,7 +51945,7 @@ iy iy iy iy -nu +bE nu nu nu @@ -52618,7 +52724,7 @@ nu nu nu nu -nu +bE iy iy HQ @@ -57763,15 +57869,15 @@ iy iy iy iy +bE nu nu nu +bE nu nu nu -nu -nu -nu +bE iy iy iy @@ -63185,15 +63291,15 @@ iy iy iy iy +bE nu nu nu +bE nu nu nu -nu -nu -nu +bE iy iy iy @@ -67055,11 +67161,11 @@ iy iy iy iy +bE nu nu nu -nu -nu +bE nu iy iy diff --git a/maps/southern_cross/southern_cross-7.dmm b/maps/southern_cross/southern_cross-7.dmm index 97c3d9c384..6315bfac7a 100644 --- a/maps/southern_cross/southern_cross-7.dmm +++ b/maps/southern_cross/southern_cross-7.dmm @@ -989,7 +989,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "cz" = ( /obj/structure/table/steel_reinforced, @@ -1145,7 +1145,7 @@ d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/monotile, /area/expoutpost/hangarthree) "cZ" = ( /obj/effect/floor_decal/industrial/warning, @@ -1520,6 +1520,15 @@ d2 = 4; icon_state = "1-4" }, +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable/blue{ + d2 = 4; + icon_state = "0-4" + }, /turf/simulated/floor/tiled/monotile, /area/expoutpost/hangarthree) "dS" = ( @@ -1528,6 +1537,12 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled/monotile, /area/expoutpost/hangarthree) "dT" = ( @@ -1564,6 +1579,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled/monotile, /area/expoutpost/hangarthree) "dY" = ( @@ -1620,6 +1638,9 @@ d2 = 8; icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, /turf/simulated/floor/tiled/monotile, /area/expoutpost/hangarthree) "ee" = ( @@ -1866,8 +1887,9 @@ opacity = 1 }, /obj/machinery/power/smes/buildable/power_shuttle{ - charge = 2e+006; - inputting = 1 + charge = 4e+006; + inputting = 1; + outputting = 1 }, /obj/structure/cable/green{ d2 = 4; @@ -2029,11 +2051,11 @@ /obj/effect/floor_decal/industrial/warning/full, /obj/machinery/power/apc/hyper{ coverlocked = 0; + locked = 0; + pixel_y = -24; environ = 0; equipment = 0; - lighting = 0; - locked = 0; - pixel_y = -24 + lighting = 0 }, /obj/structure/cable/green, /turf/simulated/shuttle/plating, @@ -3169,6 +3191,14 @@ /obj/structure/catwalk, /turf/simulated/floor/airless, /area/solar/expportsolar) +"iY" = ( +/obj/structure/table/sifwoodentable, +/obj/item/device/spaceflare, +/obj/item/device/spaceflare{ + pixel_y = 8 + }, +/turf/simulated/floor/tiled, +/area/expoutpost/prep) "iZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -4571,14 +4601,13 @@ /obj/effect/floor_decal/industrial/danger, /turf/simulated/floor/tiled, /area/expoutpost/hangarthree) -"oj" = ( -/obj/effect/floor_decal/borderfloorblack, -/turf/simulated/floor/tiled, -/area/expoutpost/hangarthree) "ok" = ( /obj/effect/floor_decal/borderfloorblack/corner{ dir = 8 }, +/obj/effect/floor_decal/industrial/danger/corner{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "ol" = ( @@ -4664,12 +4693,17 @@ }, /turf/simulated/floor/tiled, /area/expoutpost/hangarthree) -"ow" = ( -/turf/simulated/floor/plating, -/area/expoutpost/hangarthree) "ox" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "oy" = ( /turf/simulated/floor/tiled/monotile, @@ -4750,10 +4784,11 @@ /turf/simulated/floor/tiled, /area/expoutpost/hangarfour) "oG" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/monotile, /area/expoutpost/hangarthree) "oH" = ( /turf/simulated/shuttle/wall/voidcraft/lightblue, @@ -4776,12 +4811,6 @@ }, /turf/simulated/shuttle/plating, /area/shuttle/ursula) -"oJ" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/expoutpost/hangarthree) "oK" = ( /obj/effect/floor_decal/steeldecal/steel_decals4, /obj/effect/floor_decal/steeldecal/steel_decals4{ @@ -4832,10 +4861,6 @@ }, /turf/simulated/floor/tiled, /area/expoutpost/hangarfour) -"oU" = ( -/obj/effect/floor_decal/rust, -/turf/simulated/floor/plating, -/area/expoutpost/hangarthree) "oV" = ( /turf/simulated/shuttle/wall/voidcraft/hard_corner, /area/shuttle/ursula) @@ -4846,19 +4871,6 @@ }, /turf/simulated/shuttle/floor/black, /area/shuttle/ursula) -"oX" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/expoutpost/hangarthree) -"oY" = ( -/obj/effect/floor_decal/rust, -/turf/simulated/floor/tiled, -/area/expoutpost/hangarthree) "oZ" = ( /obj/structure/cable/blue{ d1 = 1; @@ -5226,13 +5238,8 @@ /turf/simulated/floor/tiled/monotile, /area/expoutpost/hangarthree) "pS" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 4 - }, -/turf/simulated/floor/plating, +/obj/item/stack/cable_coil/blue, +/turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "pT" = ( /obj/structure/bed/chair/bay/shuttle, @@ -5394,12 +5401,6 @@ }, /turf/simulated/shuttle/floor/black, /area/shuttle/stargazer) -"qk" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/expoutpost/hangarthree) "qm" = ( /obj/structure/closet/walllocker_double/kitchen/south{ name = "Ration Cabinet" @@ -5475,7 +5476,7 @@ /obj/structure/fuel_port{ pixel_x = -32 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "qx" = ( /turf/simulated/shuttle/wall/voidcraft/no_join, @@ -5541,18 +5542,12 @@ }, /turf/simulated/shuttle/wall/voidcraft/hard_corner, /area/shuttle/ursula) -"qG" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/expoutpost/hangarthree) "qH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/monotile, /area/expoutpost/hangarthree) "qI" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -5560,10 +5555,6 @@ }, /turf/simulated/floor/tiled, /area/expoutpost/hangarthree) -"qJ" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/plating, -/area/expoutpost/hangerhall) "qK" = ( /obj/structure/closet/crate/engineering, /obj/fiftyspawner/steel, @@ -5604,21 +5595,12 @@ d2 = 8; icon_state = "0-8" }, -/obj/structure/cable/green{ - d2 = 4; - icon_state = "0-4" - }, /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 6 }, /turf/simulated/shuttle/floor/yellow, /area/shuttle/ursula) "qR" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ @@ -5780,11 +5762,6 @@ }, /turf/simulated/shuttle/plating, /area/shuttle/ursula) -"qZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/expoutpost/hangarthree) "ra" = ( /obj/structure/window/reinforced/full, /obj/structure/window/reinforced, @@ -5792,10 +5769,6 @@ /obj/machinery/door/firedoor/border_only, /turf/simulated/floor/plating, /area/expoutpost/aftdock) -"rb" = ( -/obj/structure/girder/displaced, -/turf/simulated/floor/plating, -/area/expoutpost/hangarthree) "rc" = ( /obj/machinery/light{ dir = 8 @@ -6276,7 +6249,9 @@ /turf/simulated/shuttle/plating, /area/shuttle/ursula) "sl" = ( -/obj/item/frame/apc, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "sm" = ( @@ -6409,12 +6384,15 @@ /obj/effect/floor_decal/industrial/danger/corner{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "sI" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 }, +/obj/effect/floor_decal/industrial/danger{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "sJ" = ( @@ -6423,12 +6401,18 @@ }, /obj/effect/floor_decal/industrial/outline/grey, /obj/machinery/hologram/holopad, +/obj/effect/floor_decal/industrial/danger{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "sK" = ( /obj/effect/floor_decal/borderfloorblack/corner{ dir = 1 }, +/obj/effect/floor_decal/industrial/danger/corner{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/expoutpost/hangarthree) "sM" = ( @@ -7973,6 +7957,9 @@ /obj/effect/floor_decal/corner/green/border{ dir = 8 }, +/obj/machinery/light/spot{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/expoutpost/hangarone) "vQ" = ( @@ -9929,8 +9916,7 @@ "ze" = ( /obj/machinery/door/airlock/highsecurity{ name = "Teleport Access"; - req_access = list(17,43); - req_one_access = list(17,43) + req_one_access = list(17) }, /obj/structure/cable/blue{ d1 = 1; @@ -13554,6 +13540,11 @@ }, /turf/simulated/floor/plating, /area/maintenance/expoutpost/innerportmaint) +"Pl" = ( +/obj/structure/table/sifwoodentable, +/obj/item/device/bluespaceradio/southerncross_prelinked, +/turf/simulated/floor/tiled, +/area/expoutpost/prep) "Pq" = ( /obj/structure/table/glass, /obj/random/soap, @@ -13688,6 +13679,14 @@ }, /turf/simulated/shuttle/floor/black, /area/shuttle/shuttle3/start) +"PN" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/industrial/danger, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/expoutpost/hangartwo) "PO" = ( /obj/structure/cable/blue{ d1 = 4; @@ -14267,8 +14266,8 @@ /area/expoutpost/prep) "Sf" = ( /obj/machinery/computer/shuttle_control/web/shuttle3{ - my_doors = list("expshuttle3_door_L" = "Port Cargo", "shuttle3_outer" = "Airlock Outer", "shuttle3_inner" = "Airlock Inner", "expshuttle3_door_cargo" = "Cargo Hatch"); - my_sensors = list("shuttle3sens_exp" = "Exterior Environment", "shuttle3sens_exp_int" = "Cargo Area", "shuttle3sens_exp_psg" = "Passenger Area") + my_doors = list("expshuttle3_door_L"="Port Cargo","shuttle3_outer"="Airlock Outer","shuttle3_inner"="Airlock Inner","expshuttle3_door_cargo"="Cargo Hatch"); + my_sensors = list("shuttle3sens_exp"="Exterior Environment","shuttle3sens_exp_int"="Cargo Area","shuttle3sens_exp_psg"="Passenger Area") }, /turf/simulated/shuttle/floor/black, /area/shuttle/shuttle3/start) @@ -14351,6 +14350,14 @@ }, /turf/simulated/floor/tiled, /area/expoutpost/shuttle) +"Sz" = ( +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/industrial/danger, +/obj/machinery/light/spot{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/expoutpost/hangarone) "SC" = ( /obj/structure/table/bench/sifwooden, /turf/simulated/floor/tiled, @@ -34487,14 +34494,14 @@ pk of os os -os +sl os os of rQ +pS os -os -os +sl of of gT @@ -34739,13 +34746,13 @@ dB of og ot -ow -oU +ot +ot pl pD pR pR -pR +oG cx cX cY @@ -34997,19 +35004,19 @@ dB of oh ou -oG -oG ou ou -pS -qk +ou +ou +ou +ou qw cy rj -qk -pS ou -pS +ou +ou +ou sH dS of @@ -35511,7 +35518,7 @@ nt nK dB of -oj +oi dk dk oH @@ -35769,7 +35776,7 @@ nu ne dB of -oj +oi dk oH oV @@ -35788,7 +35795,7 @@ sI dS of gT -dW +Sz ZV Zn Qh @@ -36027,7 +36034,7 @@ nu ne dB of -oj +oi dk oI oW @@ -36285,7 +36292,7 @@ dT nL dB of -oj +oi dk oH oV @@ -36300,7 +36307,7 @@ rB rS rS dk -os +ox dY of gT @@ -37336,7 +37343,7 @@ sI dS of gT -dW +Sz ZV Zn Qh @@ -38093,16 +38100,16 @@ dB of ok ov -oJ -oX -oX ov ov -oX -qG -oJ -oJ -oJ +ov +ov +ov +ov +ov +ov +ov +ov ov ov ov @@ -38350,7 +38357,7 @@ nP dB of og -ow +ot ot ot ps @@ -38358,7 +38365,7 @@ pJ pR pR qH -qZ +qO qO rE rT @@ -38610,17 +38617,17 @@ of of os oK -oY +os pt of os os qI -rb +os os of rU -sl +os dg qI of @@ -38866,15 +38873,15 @@ dB aH aH of -ox -ox of of of of of -ow -ow +of +of +of +of of of of @@ -39389,7 +39396,7 @@ eq eq eo eq -qJ +eq eq eq eo @@ -45076,7 +45083,7 @@ oM ex dt aU -tI +PN eI eH ut @@ -45103,7 +45110,7 @@ It KN NT Qt -TR +Pl TR XO Jh @@ -45361,7 +45368,7 @@ IA KN NV Qt -TR +iY TR XO MR @@ -46624,7 +46631,7 @@ sQ te dt aU -tI +PN eI eH ut diff --git a/maps/southern_cross/southern_cross_areas.dm b/maps/southern_cross/southern_cross_areas.dm index b9a81c9bf9..6d8b69f2da 100644 --- a/maps/southern_cross/southern_cross_areas.dm +++ b/maps/southern_cross/southern_cross_areas.dm @@ -170,6 +170,23 @@ /area/surface/outpost/shelter name = "Wilderness Shelter" +/area/surface/outpost/shelter/dorms + name = "Wilderness Shelter Dorms" + icon_state = "Sleep" + soundproofed = TRUE + limit_mob_size = FALSE + flags = RAD_SHIELDED + +/area/surface/outpost/shelter/exterior + name = "Wilderness Shelter Exterior" + icon_state = "exit" + ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg', 'sound/music/LRRMenu.ogg', 'sound/music/LRRTrack3.ogg', 'sound/ambience/cave/AmbCaveDebriA.ogg', 'sound/ambience/cave/AmbCaveDebriB.ogg', 'sound/ambience/cave/AmbCaveDebriC.ogg', 'sound/ambience/cave/AmbCaveDebriD.ogg') + outdoors = OUTDOORS_YES + +/area/surface/outpost/shelter/utilityroom + name = "Wilderness Shelter Utility Room" + icon_state = "substation" + // Main mining outpost /area/surface/outpost/mining_main name = "North Mining Outpost" @@ -291,6 +308,10 @@ /area/surface/outpost/research/xenoarcheology name = "\improper Xenoarcheology" +/area/surface/outpost/research/xenoarcheology/exterior + name = "\improper xenoarcheology Exterior" + icon_state = "exit" + /area/surface/outpost/research/xenoarcheology/medical name = "Xenoarcheology First-Aid Station" @@ -791,6 +812,7 @@ z /area/hallway/primary/firstdeck/auxdockaft name = "\improper First Deck Aft Auxiliary Dock" icon_state = "docking_hallway" + forbid_events = TRUE /area/hallway/primary/firstdeck/auxdockfore name = "\improper First Deck Fore Auxiliary Dock" @@ -975,6 +997,19 @@ z name = "\improper Station Gym" icon_state = "fitness" +//CHOMPstation Edit 8/8/22 - Added a Art Gallery and some missing areas Kassc wanted me to add +/area/crew_quarters/seconddeck/artgallery + name = "\improper Art Gallery" + icon_state = "art" + +/area/crew_quarters/seconddeck/artsupplies + name = "\improper Art Supplies" + icon_state = "artsupply" + +/area/crew_quarters/seconddeck/gameroom + name = "\improper Game Room" + icon_state = "gaming" + //CHOMPStation Edit End /area/crew_quarters/seconddeck/locker/locker_toilet diff --git a/maps/southern_cross/submaps/gateway/snowfield.dmm b/maps/southern_cross/submaps/gateway/snowfield.dmm index 69a3397aab..b67561534d 100644 --- a/maps/southern_cross/submaps/gateway/snowfield.dmm +++ b/maps/southern_cross/submaps/gateway/snowfield.dmm @@ -1191,6 +1191,7 @@ req_access = null; req_one_access = list(2,5) }, +/mob/living/simple_mob/animal/passive/chicken, /turf/simulated/floor/tiled/techfloor/grid, /area/awaymission/snowfield/security/security_cell) "beY" = ( @@ -3488,7 +3489,6 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/item/clothing/suit/chickensuit, /turf/simulated/floor/tiled/techfloor/grid, /area/awaymission/snowfield/security/security_cell) "dgL" = ( @@ -4761,7 +4761,6 @@ layer = 2.9 }, /obj/effect/floor_decal/industrial/outline/yellow, -/obj/item/weapon/circuitboard/pointdefense, /obj/item/weapon/circuitboard/pointdefense_control{ pixel_x = 3; pixel_y = -3 @@ -7107,11 +7106,9 @@ /turf/simulated/floor/tiled/freezer, /area/awaymission/snowfield/dorms/dorm16) "giF" = ( -/obj/effect/floor_decal/borderfloorblack, -/obj/effect/floor_decal/corner/grey/border, -/mob/living/simple_mob/animal/giant_spider, -/turf/simulated/floor/tiled/techfloor, -/area/awaymission/snowfield/hallway/northhallway) +/mob/living/simple_mob/animal/giant_spider/thermic, +/turf/simulated/floor/tiled/neutral, +/area/awaymission/snowfield/medical/chemistry) "giO" = ( /obj/machinery/light/small{ dir = 1 @@ -8032,6 +8029,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/dark, /area/awaymission/snowfield/security/security_lockerroom) +"gWN" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_mob/construct/wraith/jaunt_spam{ + devourable = 0 + }, +/turf/simulated/floor/cult, +/area/awaymission/snowfield/command/gateway) "gXo" = ( /obj/structure/flora/tree/dead, /obj/structure/flora/grass/brown, @@ -8572,15 +8576,15 @@ /turf/simulated/wall/r_wall, /area/awaymission/snowfield/command/bsa) "hru" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/floor_decal/borderfloorblack{ + dir = 1 }, -/obj/structure/catwalk, -/mob/living/simple_mob/animal/giant_spider/thermic, -/turf/simulated/floor, -/area/awaymission/snowfield/medical/hallway) +/obj/effect/floor_decal/corner/grey/border{ + dir = 1 + }, +/mob/living/simple_mob/animal/giant_spider/lurker, +/turf/simulated/floor/tiled/techfloor, +/area/awaymission/snowfield/hallway/northhallway) "hrB" = ( /obj/structure/cable/yellow{ d2 = 2; @@ -9480,6 +9484,25 @@ dir = 8 }, /obj/effect/floor_decal/industrial/outline/red, +/obj/item/weapon/gun/projectile/automatic/serdy/pkm, +/obj/item/ammo_magazine/pkm, +/obj/item/ammo_magazine/pkm, +/obj/item/ammo_magazine/pkm, +/obj/item/ammo_magazine/pkm, +/obj/item/ammo_magazine/pkm/ap, +/obj/item/clothing/suit/bomb_suit/security{ + armor = list("melee" = 90, "bullet" = 85, "laser" = 70, "energy" = 80, "bomb" = 100, "bio" = 0, "rad" = 0); + armorsoak = list("melee" = 10, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 20, "bio" = 0, "rad" = 0); + desc = "You're up against the wall AND I AM THE FUCKING WALL!"; + name = "EOD-Bullet proof suit"; + slowdown = 4 + }, +/obj/item/clothing/head/bomb_hood/security{ + armor = list("melee" = 90, "bullet" = 80, "laser" = 60, "energy" = 80, "bomb" = 100, "bio" = 0, "rad" = 0); + armorsoak = list("melee" = 10, "bullet" = 0, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0); + desc = "I'll kill you, with or without my visor!"; + name = "EOD-Bullet proof hood" + }, /turf/simulated/floor/tiled/techfloor/grid, /area/awaymission/snowfield/security/heavy_armory) "ihx" = ( @@ -9942,6 +9965,8 @@ /obj/item/ammo_magazine/akm/drum, /obj/item/ammo_magazine/akm/drum, /obj/item/ammo_magazine/akm/drum, +/obj/item/ammo_magazine/akm/drum/ap, +/obj/item/ammo_magazine/akm/drum/ap, /turf/simulated/floor/tiled/techfloor/grid, /area/awaymission/snowfield/security/heavy_armory) "iEH" = ( @@ -10065,15 +10090,8 @@ /turf/simulated/floor, /area/awaymission/snowfield/hallway/frontgate_substation) "iIk" = ( -/obj/effect/floor_decal/borderfloorblack{ - dir = 1 - }, -/obj/effect/floor_decal/corner/grey/border{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/corner/grey/border, /mob/living/simple_mob/animal/giant_spider/lurker, /turf/simulated/floor/tiled/techfloor, /area/awaymission/snowfield/hallway/northhallway) @@ -10484,12 +10502,18 @@ /turf/simulated/floor/tiled/steel, /area/awaymission/snowfield/medical/storage_room) "jaj" = ( -/obj/effect/floor_decal/borderfloorblack, -/obj/effect/floor_decal/corner/grey/border, -/obj/machinery/light, -/mob/living/simple_mob/animal/giant_spider/lurker, -/turf/simulated/floor/tiled/techfloor, -/area/awaymission/snowfield/hallway/northhallway) +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/catwalk, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_mob/vore/demonAI/ira{ + faction = "cult" + }, +/turf/simulated/floor, +/area/awaymission/snowfield/hallway/commandhallway) "jaS" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -10841,14 +10865,6 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/borgupload{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/item/weapon/circuitboard/aiupload{ - pixel_x = 2; - pixel_y = -2 - }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/awaymission/snowfield/engineering/secure_tech_storage) @@ -10867,10 +10883,6 @@ pixel_x = -2; pixel_y = 2 }, -/obj/item/weapon/circuitboard/mecha_control{ - pixel_x = 1; - pixel_y = -1 - }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/awaymission/snowfield/engineering/secure_tech_storage) @@ -14287,10 +14299,6 @@ pixel_x = 2; pixel_y = -2 }, -/obj/item/weapon/circuitboard/communications{ - pixel_x = 5; - pixel_y = -5 - }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/awaymission/snowfield/engineering/secure_tech_storage) @@ -15759,7 +15767,7 @@ /obj/effect/decal/cleanable/dirt, /mob/living/simple_mob/vore/demonAI/engorge{ faction = "cult"; - health = 350; + health = 400; size_multiplier = 1.25 }, /turf/simulated/floor/cult, @@ -18697,9 +18705,6 @@ icon_state = "1-2" }, /obj/structure/catwalk, -/mob/living/simple_mob/vore/demonAI/ira{ - faction = "cult" - }, /turf/simulated/floor, /area/awaymission/snowfield/hallway/commandhallway) "pUI" = ( @@ -18804,7 +18809,7 @@ }, /obj/machinery/door/airlock/security{ name = "Detective's office"; - req_access = list (4); + req_access = list(4); req_one_access = null }, /turf/simulated/floor/lino, @@ -19361,7 +19366,7 @@ /area/awaymission/snowfield/cavern) "qrA" = ( /obj/item/weapon/bone/arm{ - pixel_y = 8 + pixel_y = 12 }, /turf/simulated/floor/tiled/techfloor, /area/awaymission/snowfield/hallway/commandhallway) @@ -19636,7 +19641,7 @@ dir = 4; health = 1e+006 }, -/obj/item/clothing/head/cueball, +/obj/item/weapon/material/snow/snowball/reinforced, /turf/simulated/floor/tiled/techfloor/grid, /area/awaymission/snowfield/security/security_cell) "qHd" = ( @@ -19829,10 +19834,6 @@ dir = 8; layer = 2.9 }, -/obj/item/weapon/circuitboard/cloning, -/obj/item/weapon/circuitboard/clonescanner, -/obj/item/weapon/circuitboard/clonepod, -/obj/item/weapon/circuitboard/scan_consolenew, /obj/item/weapon/circuitboard/med_data{ pixel_x = 3; pixel_y = -3 @@ -19902,7 +19903,7 @@ id = "snowfield testlab entrance" }, /obj/item/weapon/bone/arm{ - pixel_y = 8 + pixel_y = 12 }, /obj/effect/decal/cleanable/blood, /obj/structure/cable/yellow{ @@ -20064,8 +20065,11 @@ /turf/simulated/floor/outdoors/snow/sif/planetuse, /area/awaymission/snowfield/outside) "raJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/yellow, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor, /area/awaymission/snowfield/security/hallway2) "rbD" = ( @@ -21810,11 +21814,12 @@ /turf/simulated/floor/tiled/freezer, /area/awaymission/snowfield/dorms/dorm11) "sUZ" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, /obj/structure/door_assembly/door_assembly_sec, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor, /area/awaymission/snowfield/security/hallway2) "sVf" = ( @@ -21898,10 +21903,6 @@ layer = 2.9 }, /obj/item/weapon/circuitboard/security/mining, -/obj/item/weapon/circuitboard/message_monitor{ - pixel_x = 3; - pixel_y = -3 - }, /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/tiled/techfloor, /area/awaymission/snowfield/engineering/tech_storage) @@ -35312,7 +35313,7 @@ tzg hMS qne uOb -ned +iIk fGh ykS hAd @@ -35828,7 +35829,7 @@ tzg iLw qne uOb -jaj +ylN fGh cTX fYo @@ -36599,7 +36600,7 @@ mxV mxV mxV mIX -hMS +hru qne uOb ned @@ -37115,7 +37116,7 @@ chX chX wxc mIX -iIk +iLw qne uOb ylN @@ -37376,7 +37377,7 @@ mIX hMS mTL uOb -ned +iIk ife eRq sQm @@ -37634,7 +37635,7 @@ mIX hMS qne uOb -giF +ned ife uEo imu @@ -45354,7 +45355,7 @@ gzQ dGC kOt kOt -kOt +giF kOt kdE dpf @@ -46642,7 +46643,7 @@ rLd uGz oVH iHU -hru +uGz xiw oVH uGz @@ -48246,7 +48247,7 @@ qTe vIw jxy pUC -jxy +jaj uZn jhx ikI @@ -58581,7 +58582,7 @@ bBV ibJ ewH pIi -knS +gWN srQ iRf iRf diff --git a/maps/stellardelight/overmap.dmm b/maps/stellar_delight/overmap.dmm similarity index 100% rename from maps/stellardelight/overmap.dmm rename to maps/stellar_delight/overmap.dmm diff --git a/maps/stellardelight/ship_centcom.dmm b/maps/stellar_delight/ship_centcom.dmm similarity index 100% rename from maps/stellardelight/ship_centcom.dmm rename to maps/stellar_delight/ship_centcom.dmm diff --git a/maps/stellardelight/ship_misc.dmm b/maps/stellar_delight/ship_misc.dmm similarity index 100% rename from maps/stellardelight/ship_misc.dmm rename to maps/stellar_delight/ship_misc.dmm diff --git a/maps/stellardelight/stelardelightskybox.dmi b/maps/stellar_delight/stelardelightskybox.dmi similarity index 100% rename from maps/stellardelight/stelardelightskybox.dmi rename to maps/stellar_delight/stelardelightskybox.dmi diff --git a/maps/stellardelight/stellar_delight.dm b/maps/stellar_delight/stellar_delight.dm similarity index 100% rename from maps/stellardelight/stellar_delight.dm rename to maps/stellar_delight/stellar_delight.dm diff --git a/maps/stellardelight/stellar_delight1.dmm b/maps/stellar_delight/stellar_delight1.dmm similarity index 99% rename from maps/stellardelight/stellar_delight1.dmm rename to maps/stellar_delight/stellar_delight1.dmm index 1b7216ec14..c6ab9705a2 100644 --- a/maps/stellardelight/stellar_delight1.dmm +++ b/maps/stellar_delight/stellar_delight1.dmm @@ -6127,6 +6127,7 @@ /area/stellardelight/deck1/lowermed) "mK" = ( /obj/structure/table/sifwooden_reinforced, +/obj/item/weapon/storage/box/nifsofts_pilot, /turf/simulated/floor/tiled/eris/steel/panels, /area/stellardelight/deck1/pilot) "mL" = ( diff --git a/maps/stellardelight/stellar_delight2.dmm b/maps/stellar_delight/stellar_delight2.dmm similarity index 99% rename from maps/stellardelight/stellar_delight2.dmm rename to maps/stellar_delight/stellar_delight2.dmm index 73422b6915..35409e2504 100644 --- a/maps/stellardelight/stellar_delight2.dmm +++ b/maps/stellar_delight/stellar_delight2.dmm @@ -1736,6 +1736,18 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/eris/dark/orangecorner, /area/engineering/locker_room) +"dT" = ( +/obj/machinery/computer/atmos_alert{ + dir = 1 + }, +/obj/machinery/camera/network/engineering{ + dir = 4 + }, +/obj/structure/sign/scenery/fakefireaxe{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos/monitoring) "dU" = ( /obj/structure/bed/chair/backed_red{ dir = 4 @@ -1747,6 +1759,12 @@ /obj/structure/disposalpipe/segment, /turf/simulated/wall/bay/r_wall/steel, /area/stellardelight/deck2/o2production) +"dW" = ( +/obj/structure/closet/secure_closet/engineering_electrical/double{ + anchored = 1 + }, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/engineering/locker_room) "dX" = ( /obj/machinery/light{ dir = 8 @@ -1899,6 +1917,10 @@ }, /turf/simulated/open, /area/stellardelight/deck2/aftstarboard) +"eo" = ( +/obj/structure/closet/secure_closet/engineering_welding/double, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/engineering/locker_room) "ep" = ( /obj/machinery/power/apc/angled{ dir = 4; @@ -1965,7 +1987,7 @@ }, /obj/item/clothing/shoes/black, /obj/item/device/communicator, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "ew" = ( /obj/structure/table/steel_reinforced, @@ -2308,6 +2330,10 @@ }, /turf/simulated/floor/tiled/eris/steel/brown_platform, /area/crew_quarters/bar) +"fj" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/simulated/floor/tiled/techfloor, +/area/stellardelight/deck2/o2production) "fk" = ( /obj/machinery/vending/engivend, /obj/machinery/light{ @@ -2361,6 +2387,10 @@ }, /turf/simulated/floor/lino, /area/crew_quarters/bar) +"fq" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/turf/simulated/floor/tiled/techfloor, +/area/stellardelight/deck2/o2production) "fr" = ( /obj/structure/sign/painting/public{ pixel_x = -30 @@ -3381,7 +3411,7 @@ /obj/machinery/disposal/wall/cleaner{ dir = 4 }, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "hQ" = ( /obj/structure/table/standard, @@ -5433,10 +5463,15 @@ }, /obj/machinery/vending/loadout/loadout_misc, /obj/machinery/atmospherics/unary/vent_pump/on, +<<<<<<< HEAD /obj/effect/landmark{ name = "vinestart" }, /turf/simulated/floor/holofloor/tiled/dark, +======= +/obj/effect/landmark/vines, +/turf/simulated/floor/tiled/dark, +>>>>>>> c527964372... Merge pull request #13346 from Heroman3003/doubleclosets /area/crew_quarters/locker) "me" = ( /obj/structure/cable/white{ @@ -5672,7 +5707,7 @@ /obj/item/clothing/shoes/black, /obj/machinery/light, /obj/item/device/communicator, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "mH" = ( /obj/structure/table/steel_reinforced, @@ -6926,12 +6961,6 @@ /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/eris/steel/cargo, /area/quartermaster/storage) -"pF" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor/tiled/eris/dark/orangecorner, -/area/engineering/locker_room) "pG" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -7740,9 +7769,6 @@ }, /turf/simulated/floor/tiled/eris/cafe, /area/crew_quarters/kitchen) -"ro" = ( -/turf/simulated/floor/tiled/techfloor, -/area/stellardelight/deck2/o2production) "rp" = ( /obj/structure/cable/cyan{ icon_state = "1-2" @@ -10471,7 +10497,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "xJ" = ( /obj/structure/table/reinforced, @@ -11064,6 +11090,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/item/weapon/gun/energy/mouseray/medical, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/medical/cmostore) "yW" = ( @@ -11523,7 +11550,7 @@ }, /obj/machinery/vending/loadout/uniform, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "Af" = ( /obj/structure/table/reinforced, @@ -12767,7 +12794,7 @@ }, /obj/machinery/vending/loadout/clothing, /obj/machinery/alarm/angled, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "CW" = ( /obj/effect/floor_decal/steeldecal/steel_decals5{ @@ -12955,7 +12982,13 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +<<<<<<< HEAD /turf/simulated/floor/holofloor/tiled/dark, +======= +/obj/structure/undies_wardrobe, +/obj/effect/landmark/vermin, +/turf/simulated/floor/tiled/dark, +>>>>>>> c527964372... Merge pull request #13346 from Heroman3003/doubleclosets /area/crew_quarters/locker) "Dv" = ( /obj/structure/cable/white{ @@ -14166,7 +14199,7 @@ }, /obj/machinery/vending/loadout/overwear, /obj/machinery/camera/network/civilian, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "FS" = ( /obj/structure/cable/green{ @@ -14517,15 +14550,6 @@ }, /turf/simulated/floor/tiled/eris/cafe, /area/crew_quarters/kitchen) -"GC" = ( -/obj/machinery/computer/atmos_alert{ - dir = 1 - }, -/obj/machinery/camera/network/engineering{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/monitoring) "GD" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/green, @@ -15149,7 +15173,7 @@ /area/engineering/storage) "HV" = ( /obj/machinery/washing_machine, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "HW" = ( /obj/machinery/door/firedoor/glass, @@ -18113,10 +18137,6 @@ }, /turf/simulated/floor/tiled/eris/cafe, /area/crew_quarters/kitchen) -"OB" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/turf/simulated/floor/tiled/eris/dark/orangecorner, -/area/engineering/locker_room) "OC" = ( /obj/structure/closet/crate/bin{ anchored = 1 @@ -21378,7 +21398,7 @@ dir = 8 }, /obj/machinery/vending/loadout/gadget, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "VV" = ( /obj/structure/cable/orange{ @@ -29689,7 +29709,7 @@ NK eq sz to -GC +dT Ag Fl sp @@ -29985,7 +30005,7 @@ UY OK pO Qu -ro +fj Sz ZG Jh @@ -30127,7 +30147,7 @@ pY DE sT WM -ro +fq Sz QW Jh @@ -35361,7 +35381,7 @@ Re OI da iw -pF +dW To To Vo @@ -35505,7 +35525,7 @@ Kv dS vb Nm -OB +eo OF Oq rf diff --git a/maps/stellardelight/stellar_delight3.dmm b/maps/stellar_delight/stellar_delight3.dmm similarity index 100% rename from maps/stellardelight/stellar_delight3.dmm rename to maps/stellar_delight/stellar_delight3.dmm diff --git a/maps/stellardelight/stellar_delight_areas.dm b/maps/stellar_delight/stellar_delight_areas.dm similarity index 98% rename from maps/stellardelight/stellar_delight_areas.dm rename to maps/stellar_delight/stellar_delight_areas.dm index 47bb681c0a..a720cb6060 100644 --- a/maps/stellardelight/stellar_delight_areas.dm +++ b/maps/stellar_delight/stellar_delight_areas.dm @@ -130,6 +130,7 @@ limit_mob_size = FALSE block_suit_sensors = TRUE forbid_events = TRUE + forbid_singulo = TRUE /area/stellardelight/deck1/dorms/dorm1 name = "Dormitory One" @@ -272,8 +273,12 @@ /area/stellardelight/deck3/transitgateway name = "Transit Gateway" + forbid_events = TRUE + forbid_singulo = TRUE /area/stellardelight/deck3/cryo name = "Cryogenic Storage" + forbid_events = TRUE + forbid_singulo = TRUE /area/stellardelight/deck3/readingroom name = "Reading Rooms" @@ -281,7 +286,7 @@ flags = RAD_SHIELDED| BLUE_SHIELDED |AREA_FLAG_IS_NOT_PERSISTENT soundproofed = TRUE block_suit_sensors = TRUE - forbid_events = TRUE + forbid_events = TRUE /area/stellardelight/deck3/portdock name = "Port Dock" diff --git a/maps/stellardelight/stellar_delight_defines.dm b/maps/stellar_delight/stellar_delight_defines.dm similarity index 98% rename from maps/stellardelight/stellar_delight_defines.dm rename to maps/stellar_delight/stellar_delight_defines.dm index 3bd89d1936..b048663f34 100644 --- a/maps/stellardelight/stellar_delight_defines.dm +++ b/maps/stellar_delight/stellar_delight_defines.dm @@ -124,6 +124,11 @@ unit_test_exempt_from_atmos = list() //it maint + unit_test_z_levels = list( + Z_LEVEL_SHIP_LOW, + Z_LEVEL_SHIP_MID, + Z_LEVEL_SHIP_HIGH + ) lateload_z_levels = list( list("Ship - Central Command"), @@ -325,7 +330,7 @@ . = ..() seed_submaps(list(Z_LEVEL_SPACE_ROCKS), 60, /area/sdmine/unexplored, /datum/map_template/space_rocks) new /datum/random_map/automata/cave_system/no_cracks(null, 3, 3, Z_LEVEL_SPACE_ROCKS, world.maxx - 4, world.maxy - 4) - new /datum/random_map/noise/ore/spacerocks(null, 1, 1, Z_LEVEL_SPACE_ROCKS, 64, 64) + new /datum/random_map/noise/ore(null, 1, 1, Z_LEVEL_SPACE_ROCKS, 64, 64) /datum/map_z_level/ship_lateload/space_rocks z = Z_LEVEL_SPACE_ROCKS diff --git a/maps/stellardelight/stellar_delight_jobs.dm b/maps/stellar_delight/stellar_delight_jobs.dm similarity index 100% rename from maps/stellardelight/stellar_delight_jobs.dm rename to maps/stellar_delight/stellar_delight_jobs.dm diff --git a/maps/stellardelight/stellar_delight_shuttle_defs.dm b/maps/stellar_delight/stellar_delight_shuttle_defs.dm similarity index 100% rename from maps/stellardelight/stellar_delight_shuttle_defs.dm rename to maps/stellar_delight/stellar_delight_shuttle_defs.dm diff --git a/maps/stellardelight/stellar_delight_telecomms.dm b/maps/stellar_delight/stellar_delight_telecomms.dm similarity index 100% rename from maps/stellardelight/stellar_delight_telecomms.dm rename to maps/stellar_delight/stellar_delight_telecomms.dm diff --git a/maps/stellardelight/stellar_delight_things.dm b/maps/stellar_delight/stellar_delight_things.dm similarity index 94% rename from maps/stellardelight/stellar_delight_things.dm rename to maps/stellar_delight/stellar_delight_things.dm index 865be45621..494d9e7fc1 100644 --- a/maps/stellardelight/stellar_delight_things.dm +++ b/maps/stellar_delight/stellar_delight_things.dm @@ -152,11 +152,29 @@ layer = ABOVE_WINDOW_LAYER /obj/machinery/vending/wallmed2 layer = ABOVE_WINDOW_LAYER -/obj/structure/closet/fireaxecabinet +/obj/structure/fireaxecabinet layer = ABOVE_WINDOW_LAYER /obj/structure/extinguisher_cabinet layer = ABOVE_WINDOW_LAYER /obj/structure/mirror layer = ABOVE_WINDOW_LAYER /obj/structure/noticeboard - layer = ABOVE_WINDOW_LAYER \ No newline at end of file + layer = ABOVE_WINDOW_LAYER + +/obj/item/device/multitool/scioutpost + name = "science outpost linked multitool" + desc = "It has the data for the science outpost's quantum pad pre-loaded... assuming you didn't override it." + +/obj/item/device/multitool/scioutpost/Initialize() + . = ..() + for(var/obj/machinery/power/quantumpad/scioutpost/outpost in world) + connectable = outpost + if(connectable) + icon_state = "multitool_red" + return + +/obj/machinery/power/quantumpad/scioutpost + +/datum/random_map/noise/ore/virgo2 // Less OP generation map, but better than Underdark + deep_val = 0.7 + rare_val = 0.5 diff --git a/maps/stellardelight/stellar_delight_turfs.dm b/maps/stellar_delight/stellar_delight_turfs.dm similarity index 63% rename from maps/stellardelight/stellar_delight_turfs.dm rename to maps/stellar_delight/stellar_delight_turfs.dm index 9e7927efe2..6e8e86fb33 100644 --- a/maps/stellardelight/stellar_delight_turfs.dm +++ b/maps/stellar_delight/stellar_delight_turfs.dm @@ -45,3 +45,38 @@ VIRGO3B_TURF_CREATE(/turf/simulated/floor/outdoors/dirt) icon_state = "asteroid" VIRGO3B_TURF_CREATE(/turf/simulated/floor/outdoors/rocks) + +/turf/simulated/mineral/virgo2/make_ore(var/rare_ore) // Override V2 ore generation + if(mineral || ignore_mapgen) + return + var/mineral_name + if(rare_ore) + mineral_name = pickweight(list( + "marble" = 7, + "uranium" = 10, + "platinum" = 10, + "hematite" = 10, + "carbon" = 10, + "diamond" = 4, + "gold" = 15, + "silver" = 15, + "lead" = 5, + "verdantium" = 2, + "rutile" = 10)) + else + mineral_name = pickweight(list( + "marble" = 5, + "uranium" = 7, + "platinum" = 7, + "hematite" = 28, + "carbon" = 28, + "diamond" = 2, + "gold" = 7, + "silver" = 7, + "lead" = 4, + "verdantium" = 1, + "rutile" = 10)) + if(mineral_name && (mineral_name in GLOB.ore_data)) + mineral = GLOB.ore_data[mineral_name] + UpdateMineral() + update_icon() diff --git a/maps/submaps/space_rocks/space_rocks.dm b/maps/submaps/space_rocks/space_rocks.dm index 3951d51171..62437676d5 100644 --- a/maps/submaps/space_rocks/space_rocks.dm +++ b/maps/submaps/space_rocks/space_rocks.dm @@ -11,7 +11,7 @@ "uranium" = 10, "platinum" = 10, "hematite" = 20, - "carbon" = 5, + "carbon" = 20, "diamond" = 1, "gold" = 8, "silver" = 8, @@ -24,7 +24,7 @@ "uranium" = 5, "platinum" = 5, "hematite" = 35, - "carbon" = 5, + "carbon" = 35, "gold" = 3, "silver" = 3, "phoron" = 25, @@ -35,15 +35,7 @@ UpdateMineral() update_icon() -/datum/random_map/noise/ore/spacerocks - descriptor = "asteroid field ore distribution map" - deep_val = 0.2 - rare_val = 0.1 - -/datum/random_map/noise/ore/spacerocks/check_map_sanity() - return 1 //Totally random, but probably beneficial. - -/area/sdmine/ +/area/sdmine ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') base_turf = /turf/simulated/mineral/floor/vacuum /area/sdmine/unexplored diff --git a/maps/submaps/surface_submaps/wilderness/AmbushBase.dmm b/maps/submaps/surface_submaps/wilderness/AmbushBase.dmm new file mode 100644 index 0000000000..7eb873b7c0 --- /dev/null +++ b/maps/submaps/surface_submaps/wilderness/AmbushBase.dmm @@ -0,0 +1,2110 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aQ" = ( +/obj/machinery/porta_turret/poi{ + faction = "syndicate" + }, +/turf/simulated/floor/plating, +/area/submap/DugOutMercs) +"bg" = ( +/obj/random/landmine, +/turf/template_noop, +/area/template_noop) +"bk" = ( +/obj/structure/table/rack/shelf, +/obj/random/toolbox, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"cd" = ( +/obj/structure/cliff/automatic{ + dir = 8 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/template_noop, +/area/submap/DugOutMercs) +"dh" = ( +/obj/structure/cliff/automatic{ + dir = 4 + }, +/obj/structure/railing/grey{ + dir = 4 + }, +/turf/template_noop, +/area/submap/DugOutMercs) +"do" = ( +/obj/random/mob/merc/all, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"dI" = ( +/obj/structure/table/rack, +/obj/random/energy, +/turf/simulated/floor/tiled/techmaint, +/area/submap/DugOutMercs) +"fq" = ( +/obj/item/weapon/mine/phoron, +/turf/template_noop, +/area/submap/DugOutMercs) +"fs" = ( +/obj/structure/table/bench/padded, +/mob/living/simple_mob/humanoid/merc/melee/sword, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"fP" = ( +/obj/vehicle/boat/dragon, +/turf/simulated/floor/water, +/area/submap/DugOutMercs) +"fR" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/water, +/area/submap/DugOutMercs) +"fS" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"go" = ( +/turf/template_noop, +/area/template_noop) +"hH" = ( +/obj/random/mob/merc/all, +/turf/simulated/floor/tiled/techmaint, +/area/submap/DugOutMercs) +"hZ" = ( +/obj/structure/table/bench/padded, +/mob/living/simple_mob/humanoid/merc/ranged/deagle, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"jz" = ( +/obj/structure/table/rack, +/obj/item/ammo_magazine/ammo_box/b145, +/turf/simulated/floor/tiled/techmaint, +/area/submap/DugOutMercs) +"kF" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/device/bluespaceradio/southerncross_prelinked, +/obj/item/weapon/storage/mre/random, +/obj/item/device/binoculars, +/turf/simulated/floor/outdoors/rocks, +/area/submap/DugOutMercs) +"kN" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"kW" = ( +/obj/structure/table/bench/padded, +/obj/random/mob/merc/all, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"ml" = ( +/obj/machinery/door/airlock, +/turf/simulated/wall/r_wall, +/area/submap/DugOutMercs) +"mY" = ( +/obj/structure/bed/chair, +/mob/living/simple_mob/humanoid/merc/ranged/sniper, +/turf/simulated/floor/outdoors/rocks, +/area/submap/DugOutMercs) +"nZ" = ( +/obj/random/landmine, +/turf/simulated/wall/r_wall, +/area/submap/DugOutMercs) +"oq" = ( +/obj/structure/ledge/ledge_stairs, +/mob/living/simple_mob/humanoid/merc/melee/sword, +/turf/simulated/floor/outdoors/dirt, +/area/submap/DugOutMercs) +"po" = ( +/turf/simulated/floor/water/deep, +/area/submap/DugOutMercs) +"qR" = ( +/obj/structure/table/rack, +/obj/item/weapon/cell/device/weapon, +/obj/item/weapon/cell/device/weapon, +/turf/simulated/floor/tiled/techmaint, +/area/submap/DugOutMercs) +"rd" = ( +/turf/simulated/floor/tiled/techmaint, +/area/submap/DugOutMercs) +"rr" = ( +/obj/structure/table/bench/padded, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"rV" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/structure/cliff/automatic{ + dir = 6 + }, +/obj/structure/railing/grey, +/turf/template_noop, +/area/submap/DugOutMercs) +"sc" = ( +/obj/structure/table/reinforced, +/obj/random/cigarettes, +/obj/item/weapon/flame/lighter/random, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"sO" = ( +/obj/machinery/power/smes/buildable/point_of_interest, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"tS" = ( +/obj/random/landmine, +/turf/simulated/floor/water, +/area/submap/DugOutMercs) +"uv" = ( +/turf/simulated/wall/r_wall, +/area/submap/DugOutMercs) +"vR" = ( +/obj/structure/cliff/automatic/ramp{ + dir = 9 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/template_noop, +/area/submap/DugOutMercs) +"xC" = ( +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"yc" = ( +/obj/machinery/door/airlock/highsecurity, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"yr" = ( +/obj/structure/table/rack, +/obj/random/grenade/box, +/turf/simulated/floor/tiled/techmaint, +/area/submap/DugOutMercs) +"yA" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"yG" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techmaint, +/area/submap/DugOutMercs) +"zG" = ( +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "PAPC"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"Ag" = ( +/obj/structure/ledge/ledge_stairs, +/turf/simulated/floor/outdoors/rocks, +/area/submap/DugOutMercs) +"Cl" = ( +/obj/structure/ledge/ledge_stairs, +/obj/structure/ledge/ledge_stairs, +/obj/structure/barricade, +/turf/simulated/floor/outdoors/rocks, +/area/submap/DugOutMercs) +"CA" = ( +/obj/structure/cliff/automatic/corner{ + dir = 6 + }, +/turf/template_noop, +/area/submap/DugOutMercs) +"Da" = ( +/obj/machinery/door/airlock, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"De" = ( +/obj/random/landmine, +/turf/template_noop, +/area/submap/DugOutMercs) +"DB" = ( +/obj/structure/cliff/automatic/corner, +/turf/template_noop, +/area/submap/DugOutMercs) +"DJ" = ( +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/structure/railing/grey, +/obj/structure/cliff/automatic{ + dir = 10 + }, +/turf/template_noop, +/area/submap/DugOutMercs) +"DV" = ( +/obj/structure/table/marble, +/obj/item/stack/material/phoron, +/obj/item/stack/material/phoron, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"Eh" = ( +/obj/machinery/door/airlock/engineering, +/turf/simulated/floor/plating, +/area/submap/DugOutMercs) +"Ex" = ( +/obj/structure/table/rack/shelf, +/obj/random/firstaid, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"FQ" = ( +/obj/machinery/power/terminal{ + dir = 1; + icon_state = "term" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"FZ" = ( +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"Hb" = ( +/obj/random/landmine, +/obj/random/landmine, +/turf/template_noop, +/area/submap/DugOutMercs) +"Hk" = ( +/obj/structure/cliff/automatic/corner{ + dir = 9 + }, +/turf/template_noop, +/area/submap/DugOutMercs) +"IA" = ( +/mob/living/simple_mob/humanoid/merc/ranged/ionrifle, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"Jz" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/submap/DugOutMercs) +"JJ" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/turf/simulated/floor/water, +/area/submap/DugOutMercs) +"Mh" = ( +/mob/living/simple_mob/humanoid/merc/ranged/grenadier/poi, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"Ng" = ( +/obj/structure/cliff/automatic, +/obj/structure/railing/grey{ + dir = 1 + }, +/turf/template_noop, +/area/submap/DugOutMercs) +"Nl" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"Nr" = ( +/obj/structure/table/marble, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"NJ" = ( +/obj/structure/table/marble, +/obj/item/stack/material/phoron{ + amount = 10 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"NM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only, +/turf/simulated/floor/plating, +/area/submap/DugOutMercs) +"OP" = ( +/turf/simulated/floor/water, +/area/submap/DugOutMercs) +"Pe" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"Qf" = ( +/turf/template_noop, +/area/submap/DugOutMercs) +"Qm" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/firedoor/border_only, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/submap/DugOutMercs) +"QM" = ( +/obj/structure/table/glass, +/obj/item/stolenpackage, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"Rz" = ( +/turf/simulated/floor/outdoors/rocks, +/area/submap/DugOutMercs) +"RS" = ( +/obj/structure/railing/grey, +/turf/simulated/floor/water, +/area/submap/DugOutMercs) +"Sj" = ( +/obj/structure/table/rack/shelf, +/obj/structure/plushie/drone, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"TO" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"TQ" = ( +/obj/structure/cliff/automatic/corner{ + dir = 10 + }, +/turf/template_noop, +/area/submap/DugOutMercs) +"Vn" = ( +/obj/structure/cliff/automatic/ramp, +/obj/structure/railing/grey{ + dir = 4 + }, +/turf/template_noop, +/area/submap/DugOutMercs) +"VO" = ( +/mob/living/simple_mob/humanoid/merc/melee/sword, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"VX" = ( +/mob/living/simple_mob/mechanical/viscerator/mercenary, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/DugOutMercs) +"Wx" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"WY" = ( +/mob/living/simple_mob/humanoid/merc/ranged/technician, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) +"Yg" = ( +/turf/simulated/floor/wood, +/area/submap/DugOutMercs) +"YW" = ( +/obj/structure/table/rack/shelf, +/obj/random/medical, +/turf/simulated/floor/tiled, +/area/submap/DugOutMercs) + +(1,1,1) = {" +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +"} +(2,1,1) = {" +go +Qf +Qf +De +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Hb +Qf +Rz +Rz +Rz +Rz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +CA +dh +dh +DB +go +"} +(3,1,1) = {" +go +Qf +Qf +Qf +De +Qf +Qf +De +Qf +Qf +Rz +Rz +Rz +OP +OP +tS +OP +Rz +Rz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Vn +rV +Rz +Rz +Ng +go +"} +(4,1,1) = {" +go +Qf +De +De +Qf +Qf +De +Qf +Qf +Rz +OP +OP +OP +OP +OP +OP +OP +OP +OP +Rz +Rz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +oq +Ag +Cl +mY +kF +Ng +go +"} +(5,1,1) = {" +go +Qf +Qf +Qf +Qf +Qf +Qf +Rz +Rz +OP +OP +OP +OP +OP +OP +OP +OP +OP +OP +OP +OP +Rz +aQ +Qf +Qf +Qf +Qf +Qf +aQ +Qf +Qf +Qf +Qf +Qf +vR +DJ +Rz +Rz +Ng +go +"} +(6,1,1) = {" +go +Qf +Qf +De +Qf +Qf +Rz +OP +OP +OP +OP +OP +po +po +po +OP +OP +OP +OP +OP +OP +OP +uv +uv +uv +uv +uv +nZ +uv +uv +uv +uv +Qf +Qf +Qf +TQ +cd +cd +Hk +go +"} +(7,1,1) = {" +go +Qf +Hb +Qf +Qf +Rz +OP +OP +OP +OP +po +po +po +po +po +OP +OP +OP +OP +OP +OP +OP +OP +Rz +xC +xC +xC +xC +uv +xC +xC +uv +Qf +Qf +Qf +Qf +Qf +De +Qf +go +"} +(8,1,1) = {" +go +Qf +Qf +Qf +Rz +OP +OP +OP +OP +po +po +po +po +po +OP +OP +OP +OP +OP +OP +OP +OP +OP +OP +Rz +xC +Mh +xC +uv +xC +xC +uv +Qf +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(9,1,1) = {" +go +Qf +De +Rz +OP +OP +OP +OP +OP +po +po +po +po +po +po +po +OP +OP +JJ +OP +fP +OP +JJ +JJ +Rz +xC +xC +xC +uv +Wx +xC +Da +Qf +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(10,1,1) = {" +bg +Qf +Qf +Rz +OP +OP +OP +OP +OP +po +po +po +po +po +po +po +OP +RS +Yg +Yg +Yg +Yg +Yg +Yg +Yg +Yg +xC +Nl +uv +xC +xC +uv +Qf +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(11,1,1) = {" +go +Qf +Qf +Rz +OP +OP +OP +OP +po +po +po +po +po +po +po +po +OP +RS +Yg +Yg +Yg +Yg +Yg +Yg +Yg +Yg +xC +xC +uv +xC +Nl +uv +Qf +Qf +Qf +Qf +Qf +Qf +Qf +bg +"} +(12,1,1) = {" +go +De +Rz +OP +OP +OP +OP +po +po +po +po +po +po +po +po +po +OP +RS +Yg +Yg +Yg +Yg +Yg +Yg +Yg +Yg +xC +xC +Da +xC +do +uv +Qf +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(13,1,1) = {" +go +Qf +Rz +OP +OP +OP +po +po +po +po +po +po +po +po +po +OP +OP +RS +Yg +Yg +Yg +Yg +Yg +Yg +Yg +Yg +xC +xC +uv +Wx +xC +uv +Qf +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(14,1,1) = {" +go +Qf +Rz +OP +OP +OP +po +po +po +po +po +po +po +OP +OP +OP +OP +OP +fR +fR +fR +fR +fR +fR +Rz +xC +xC +xC +uv +xC +xC +uv +aQ +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(15,1,1) = {" +go +Qf +Qf +Rz +OP +OP +po +po +po +po +po +po +OP +OP +OP +OP +OP +OP +OP +OP +OP +OP +uv +Rz +xC +xC +xC +Nl +uv +xC +Nl +uv +uv +uv +uv +uv +uv +aQ +Qf +go +"} +(16,1,1) = {" +go +Qf +De +Rz +OP +po +po +po +po +po +po +OP +OP +OP +OP +OP +OP +OP +OP +OP +OP +Rz +uv +Wx +xC +do +xC +xC +uv +xC +xC +uv +dI +rd +rd +yr +uv +Qf +Qf +go +"} +(17,1,1) = {" +go +Qf +Qf +Rz +OP +OP +po +po +po +po +OP +OP +OP +OP +OP +OP +OP +OP +OP +Rz +Rz +Qf +uv +xC +xC +xC +xC +xC +uv +xC +xC +yc +rd +rd +rd +rd +uv +Qf +Qf +go +"} +(18,1,1) = {" +go +Qf +Rz +OP +OP +po +po +po +po +OP +OP +OP +OP +OP +Rz +Rz +Rz +Rz +Rz +Qf +Qf +aQ +uv +xC +xC +xC +xC +xC +uv +xC +xC +uv +rd +rd +hH +yG +uv +Qf +Qf +go +"} +(19,1,1) = {" +go +Qf +Rz +OP +tS +po +po +po +po +OP +OP +OP +OP +Rz +Qf +aQ +uv +uv +uv +uv +uv +uv +uv +uv +ml +xC +uv +uv +uv +IA +xC +uv +rd +rd +rd +rd +uv +De +Qf +go +"} +(20,1,1) = {" +go +Qf +De +Rz +OP +OP +po +po +po +OP +OP +OP +Rz +Qf +Qf +Qf +uv +NJ +DV +Nr +yA +yA +uv +xC +xC +xC +xC +Nl +uv +xC +xC +uv +jz +rd +rd +qR +uv +Qf +Qf +go +"} +(21,1,1) = {" +go +Qf +Rz +OP +OP +OP +po +po +po +OP +OP +Rz +Qf +Qf +Qf +Qf +uv +kN +VX +VX +VX +yA +Eh +xC +WY +xC +xC +xC +uv +xC +xC +uv +uv +uv +uv +uv +uv +Qf +Qf +go +"} +(22,1,1) = {" +go +Qf +Rz +OP +OP +OP +po +po +po +OP +OP +Rz +Qf +Qf +Qf +Qf +uv +zG +VX +VX +VX +TO +uv +xC +xC +xC +xC +xC +uv +xC +xC +uv +YW +xC +xC +xC +uv +Qf +Qf +go +"} +(23,1,1) = {" +go +Qf +Rz +OP +OP +OP +OP +po +po +OP +OP +Rz +Qf +Qf +Qf +Qf +uv +sO +FQ +FZ +yA +yA +uv +xC +xC +xC +xC +Nl +uv +xC +Nl +uv +Wx +xC +xC +xC +uv +Qf +Qf +go +"} +(24,1,1) = {" +go +Qf +Rz +OP +OP +OP +OP +po +po +po +OP +OP +Rz +Rz +Qf +aQ +uv +uv +uv +uv +uv +uv +uv +uv +uv +Da +uv +uv +uv +xC +xC +uv +bk +xC +sc +xC +uv +Qf +Qf +go +"} +(25,1,1) = {" +go +Qf +De +Rz +OP +OP +po +po +po +po +OP +OP +OP +OP +Rz +Qf +Qf +Qf +Qf +Qf +Qf +aQ +uv +xC +xC +xC +xC +xC +uv +xC +xC +Da +xC +xC +Pe +hZ +uv +De +Qf +go +"} +(26,1,1) = {" +go +Qf +Qf +Rz +OP +OP +po +po +po +OP +OP +OP +OP +OP +OP +Rz +Rz +Qf +Qf +Qf +Qf +Qf +Qm +rr +fS +fS +rr +xC +uv +Wx +xC +uv +Ex +xC +Pe +xC +uv +Qf +Qf +go +"} +(27,1,1) = {" +go +Qf +Rz +OP +OP +OP +po +po +po +po +OP +OP +OP +OP +OP +OP +OP +Rz +Qf +Qf +Qf +Qf +Jz +xC +fS +fS +xC +xC +uv +VO +xC +uv +Wx +xC +xC +xC +uv +Qf +Qf +go +"} +(28,1,1) = {" +go +Qf +Rz +OP +OP +OP +po +po +po +po +po +po +OP +OP +OP +OP +OP +OP +Rz +Rz +Qf +Qf +NM +kW +fS +fS +rr +Nl +uv +xC +Nl +uv +Sj +xC +xC +xC +uv +Qf +De +go +"} +(29,1,1) = {" +go +Qf +Rz +OP +tS +po +po +po +po +po +po +po +po +po +OP +OP +OP +OP +OP +OP +Rz +Rz +uv +Wx +fS +QM +xC +xC +uv +xC +xC +uv +uv +uv +uv +uv +uv +aQ +Qf +go +"} +(30,1,1) = {" +go +De +Rz +OP +OP +po +po +po +po +po +po +po +po +po +po +OP +OP +OP +OP +OP +OP +OP +Qm +rr +fS +fS +fs +xC +Da +xC +xC +uv +aQ +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(31,1,1) = {" +go +Qf +Rz +OP +OP +po +po +po +po +po +po +po +po +po +po +po +OP +OP +OP +OP +OP +OP +Jz +xC +QM +fS +xC +xC +uv +Wx +xC +uv +Qf +Qf +Qf +Qf +Qf +Qf +De +go +"} +(32,1,1) = {" +go +Qf +Rz +OP +OP +po +po +po +po +po +po +po +po +po +po +po +OP +OP +OP +OP +OP +OP +Jz +kW +fS +fS +rr +xC +uv +xC +xC +Da +Qf +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(33,1,1) = {" +go +Qf +Rz +tS +OP +OP +po +po +po +po +po +po +po +po +po +po +OP +OP +OP +OP +OP +OP +Jz +xC +fS +fS +xC +Nl +uv +xC +Nl +uv +Qf +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(34,1,1) = {" +go +Qf +Qf +Rz +OP +OP +OP +po +po +po +po +po +po +po +po +po +OP +OP +OP +OP +OP +OP +NM +xC +xC +xC +xC +xC +uv +xC +xC +uv +Qf +Qf +Qf +Qf +Qf +Qf +Qf +go +"} +(35,1,1) = {" +go +Qf +Qf +Rz +OP +OP +OP +OP +po +po +po +po +po +OP +OP +OP +OP +OP +OP +OP +OP +Rz +uv +uv +uv +uv +uv +uv +uv +uv +uv +uv +Qf +Qf +Qf +CA +dh +dh +DB +go +"} +(36,1,1) = {" +go +De +Qf +Qf +Rz +OP +OP +OP +po +po +po +OP +OP +OP +OP +OP +OP +OP +OP +OP +Rz +Qf +aQ +Qf +Qf +Qf +Qf +Qf +aQ +Qf +Qf +Qf +Qf +Qf +Vn +rV +Rz +Rz +Ng +go +"} +(37,1,1) = {" +go +Qf +Qf +De +Qf +Rz +OP +OP +OP +OP +OP +OP +OP +OP +Rz +Rz +OP +OP +Rz +Rz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +De +oq +Ag +Cl +mY +kF +Ng +go +"} +(38,1,1) = {" +go +Qf +Qf +Qf +Qf +Qf +Rz +OP +OP +OP +OP +tS +OP +Rz +Qf +Qf +Rz +Rz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +fq +Qf +Qf +Qf +Qf +Qf +Qf +Qf +vR +DJ +Rz +Rz +Ng +go +"} +(39,1,1) = {" +go +Qf +Qf +Qf +De +Qf +De +Rz +Rz +Rz +Rz +Rz +Rz +Qf +Qf +Qf +Qf +Qf +Qf +Qf +De +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +Qf +TQ +cd +cd +Hk +go +"} +(40,1,1) = {" +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +go +"} diff --git a/maps/submaps/surface_submaps/wilderness/Chapel.dmm b/maps/submaps/surface_submaps/wilderness/Chapel.dmm index 70758deeda..bf1e5bbefa 100644 --- a/maps/submaps/surface_submaps/wilderness/Chapel.dmm +++ b/maps/submaps/surface_submaps/wilderness/Chapel.dmm @@ -645,7 +645,7 @@ /obj/effect/floor_decal/industrial/warning/dust{ dir = 5 }, -/obj/machinery/power/smes/buildable/point_of_interest{ +/obj/machinery/power/smes/buildable{ charge = 2e+006; input_attempt = 1; input_level = 250000; @@ -655,7 +655,7 @@ d2 = 2; icon_state = "0-2" }, -/turf/simulated/floor/wood/sif, +/turf/simulated/floor, /area/submap/Chapel1) "Tv" = ( /turf/simulated/floor/outdoors/grass/sif/forest, diff --git a/maps/submaps/surface_submaps/wilderness/CultBar.dmm b/maps/submaps/surface_submaps/wilderness/CultBar.dmm new file mode 100644 index 0000000000..5a6d06a697 --- /dev/null +++ b/maps/submaps/surface_submaps/wilderness/CultBar.dmm @@ -0,0 +1,1663 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bv" = ( +/obj/structure/closet/crate/secure/loot, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"cH" = ( +/obj/structure/table/woodentable, +/obj/random/firstaid, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"dt" = ( +/turf/simulated/floor/wood/sif/broken, +/area/submap/CultBar) +"dO" = ( +/obj/item/stolenpackage, +/obj/structure/table/rack, +/obj/item/stack/material/phoron{ + amount = 10 + }, +/obj/machinery/light/small/emergency/flicker{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/CultBar) +"dY" = ( +/obj/machinery/light/small/emergency/flicker, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"eM" = ( +/obj/structure/table/bench/sifwooden, +/mob/living/simple_mob/humanoid/cultist/caster, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"fe" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/snacks/taco, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"fB" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"fR" = ( +/obj/structure/table/bench/sifwooden, +/mob/living/simple_mob/humanoid/cultist/human, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"ij" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/obj/machinery/light/small/emergency/flicker{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"iJ" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/snacks/taco, +/turf/simulated/floor/wood/sif/broken, +/area/submap/CultBar) +"jk" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/weapon/reagent_containers/food/drinks/decaf, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"jJ" = ( +/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt, +/turf/simulated/floor/wood/sif/broken, +/area/submap/CultBar) +"jM" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"kD" = ( +/mob/living/simple_mob/humanoid/cultist/castertesh, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"kK" = ( +/obj/effect/rune, +/obj/item/clothing/head/culthood/alt, +/obj/item/weapon/melee/cultblade, +/obj/item/clothing/suit/cultrobes/alt, +/obj/item/clothing/shoes/cult, +/turf/simulated/flesh, +/area/submap/CultBar) +"lm" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/stolenpackage, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"ma" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/CultBar) +"mt" = ( +/turf/simulated/floor/outdoors/dirt, +/area/submap/CultBar) +"mT" = ( +/obj/structure/table/bench/sifwooden, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"nj" = ( +/obj/structure/table/marble, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"nO" = ( +/obj/structure/cable/cyan{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "PAPC"; + pixel_x = 0; + pixel_y = 24 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/CultBar) +"nU" = ( +/mob/living/simple_mob/humanoid/cultist/tesh, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"ok" = ( +/turf/template_noop, +/area/template_noop) +"oo" = ( +/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt, +/turf/simulated/floor/outdoors/dirt, +/area/submap/CultBar) +"or" = ( +/mob/living/simple_mob/humanoid/cultist/human, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"ov" = ( +/obj/item/clothing/head/helmet/bulletproof, +/obj/effect/decal/remains/human, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"oZ" = ( +/obj/structure/bookcase, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"pd" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/champagne, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"pX" = ( +/obj/item/clothing/head/helmet/bulletproof, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"qh" = ( +/obj/machinery/appliance/cooker/grill, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"qP" = ( +/obj/structure/table/sifwooden_reinforced, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"wr" = ( +/mob/living/simple_mob/humanoid/cultist/hunter, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"yP" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/random/drinksoft, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"zU" = ( +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Ah" = ( +/obj/item/clothing/suit/armor/bulletproof, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"AO" = ( +/obj/machinery/power/smes/buildable/point_of_interest, +/obj/structure/cable/cyan{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/CultBar) +"Br" = ( +/mob/living/simple_mob/humanoid/cultist/hunter, +/obj/structure/table/bench/sifwooden, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Ch" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/machinery/chemical_dispenser/bar_soft/full, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Co" = ( +/obj/structure/cult/pylon, +/turf/simulated/floor/outdoors/dirt, +/area/submap/CultBar) +"Cp" = ( +/turf/simulated/floor/water/ocean, +/area/submap/CultBar) +"CY" = ( +/obj/item/clothing/gloves/arm_guard/bulletproof, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Dm" = ( +/obj/effect/decal/remains/human, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Dp" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/melee/energy/sword/ionic_rapier/lance, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Dw" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/machinery/chemical_dispenser/bar_alc/full, +/obj/machinery/light/small/emergency/flicker{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"DY" = ( +/obj/effect/gibspawner/human, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"EM" = ( +/turf/simulated/floor/water/ocean, +/area/template_noop) +"EY" = ( +/obj/machinery/power/terminal{ + dir = 1; + icon_state = "term" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/CultBar) +"Fb" = ( +/mob/living/simple_mob/humanoid/cultist/elite, +/turf/simulated/floor/outdoors/dirt, +/area/submap/CultBar) +"Gp" = ( +/obj/effect/gibspawner/human, +/turf/simulated/floor/wood/sif/broken, +/area/submap/CultBar) +"Gy" = ( +/obj/structure/table/marble, +/obj/machinery/light/small/emergency/flicker{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"HP" = ( +/obj/item/clothing/shoes/leg_guard/bulletproof, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"JE" = ( +/mob/living/simple_mob/vore/demonAI/wendigo, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/CultBar) +"Kb" = ( +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman, +/turf/simulated/floor/tiled/techfloor/grid, +/area/submap/CultBar) +"Ks" = ( +/obj/machinery/light/small/emergency/flicker{ + dir = 1 + }, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"KF" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Mx" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"MJ" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/random/energy, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"NZ" = ( +/mob/living/simple_mob/humanoid/cultist/human, +/obj/structure/table/bench/sifwooden, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"QX" = ( +/obj/structure/simple_door/sifwood, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"RO" = ( +/obj/structure/table/woodentable, +/obj/random/contraband, +/obj/machinery/light/small/flicker, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Sn" = ( +/obj/structure/grille/cult, +/obj/structure/bonfire/permanent, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Ti" = ( +/turf/template_noop, +/area/submap/CultBar) +"VZ" = ( +/turf/simulated/wall/log_sif, +/area/submap/CultBar) +"Wc" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Wf" = ( +/mob/living/simple_mob/vore/demonAI/wendigo, +/turf/template_noop, +/area/submap/CultBar) +"Wq" = ( +/obj/structure/table/marble, +/obj/machinery/light/small/flicker, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"WL" = ( +/obj/machinery/light/small/flicker, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"WT" = ( +/obj/structure/table/gamblingtable, +/turf/simulated/floor/wood/sif/broken, +/area/submap/CultBar) +"Xa" = ( +/obj/structure/table/gamblingtable, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"YU" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/reagent_containers/food/snacks/stew, +/obj/item/weapon/reagent_containers/food/snacks/stew, +/obj/item/weapon/reagent_containers/food/snacks/stew, +/obj/item/weapon/reagent_containers/food/snacks/bloodsoup, +/obj/item/weapon/reagent_containers/food/snacks/bloodsoup, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Zl" = ( +/obj/structure/table/sifwooden_reinforced, +/obj/item/weapon/melee/energy/sword/red, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Zx" = ( +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/food/snacks/sharkmeatcooked, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) +"Zz" = ( +/obj/effect/decal/remains/human, +/turf/simulated/floor/wood/sif/broken, +/area/submap/CultBar) +"ZZ" = ( +/obj/structure/window/basic, +/obj/structure/curtain, +/turf/simulated/floor/wood/sif, +/area/submap/CultBar) + +(1,1,1) = {" +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +"} +(2,1,1) = {" +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +"} +(3,1,1) = {" +ok +ok +Ti +Wf +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +ok +ok +ok +"} +(4,1,1) = {" +ok +ok +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Wf +Ti +ok +ok +ok +"} +(5,1,1) = {" +ok +ok +Ti +Ti +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +Ti +Ti +Ti +Ti +Ti +Ti +ok +ok +ok +"} +(6,1,1) = {" +ok +ok +Ti +Ti +VZ +Sn +zU +HP +zU +zU +zU +Sn +VZ +oZ +zU +bv +VZ +zU +zU +zU +zU +zU +zU +zU +dY +VZ +Ti +Ti +Ti +Cp +Cp +Ti +ok +ok +ok +"} +(7,1,1) = {" +ok +ok +Ti +Ti +VZ +zU +zU +Gp +zU +zU +Zz +CY +VZ +oZ +zU +Dp +VZ +Ks +zU +zU +zU +dt +zU +zU +zU +QX +Ti +Ti +Cp +Cp +Cp +Cp +ok +ok +ok +"} +(8,1,1) = {" +ok +ok +Ti +Ti +VZ +zU +zU +zU +zU +zU +zU +zU +QX +zU +jJ +RO +VZ +zU +zU +zU +zU +zU +zU +zU +dY +VZ +Ti +Cp +Cp +Cp +Cp +Cp +EM +ok +ok +"} +(9,1,1) = {" +ok +ok +Ti +Ti +VZ +zU +Dm +zU +oo +zU +DY +zU +VZ +oZ +zU +cH +VZ +Ks +mT +lm +qP +mT +zU +VZ +VZ +VZ +Ti +Cp +Cp +Cp +Cp +Cp +EM +ok +ok +"} +(10,1,1) = {" +ok +ok +Ti +Ti +VZ +zU +zU +Co +mt +Co +zU +zU +VZ +oZ +zU +bv +VZ +zU +zU +qP +qP +zU +zU +VZ +Ti +Ti +Ti +Cp +Cp +Cp +Cp +Cp +EM +ok +ok +"} +(11,1,1) = {" +ok +ok +Ti +Ti +VZ +dt +mt +Fb +kK +mt +mt +zU +VZ +VZ +QX +VZ +VZ +zU +mT +qP +qP +fR +zU +VZ +Ti +Ti +Ti +Cp +Cp +Cp +Cp +Cp +EM +ok +ok +"} +(12,1,1) = {" +ok +ok +Ti +Ti +VZ +zU +zU +Co +mt +Co +zU +zU +VZ +qP +zU +zU +qP +mT +zU +qP +qP +zU +zU +ZZ +Ti +Ti +Ti +Cp +Cp +Cp +Cp +Cp +EM +ok +ok +"} +(13,1,1) = {" +ok +ok +Ti +Ti +VZ +zU +zU +DY +oo +zU +Dm +dt +VZ +Dw +zU +zU +qP +zU +mT +qP +qP +mT +zU +ZZ +Ti +Ti +Ti +Cp +Cp +Cp +Cp +Cp +EM +ok +ok +"} +(14,1,1) = {" +ok +ok +Ti +Ti +VZ +zU +ov +zU +zU +zU +zU +Ah +VZ +qP +zU +zU +pd +mT +dt +zU +zU +zU +zU +ZZ +Ti +Ti +Ti +Ti +Cp +Cp +Cp +Cp +ok +ok +ok +"} +(15,1,1) = {" +ok +ok +Ti +Ti +VZ +zU +pX +zU +dt +DY +zU +zU +VZ +qP +zU +wr +qP +zU +zU +zU +zU +zU +dt +VZ +Ti +Ti +Ti +Ti +Cp +Cp +Cp +Ti +ok +ok +ok +"} +(16,1,1) = {" +ok +ok +Ti +Ti +VZ +Sn +zU +zU +zU +zU +zU +Sn +VZ +Ch +zU +zU +qP +NZ +zU +zU +zU +zU +dY +VZ +Ti +Ti +Ti +Ti +Ti +Cp +Cp +Ti +ok +ok +ok +"} +(17,1,1) = {" +ok +ok +Ti +Ti +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +qP +zU +zU +Zl +zU +mT +qP +qP +mT +zU +VZ +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +ok +ok +ok +"} +(18,1,1) = {" +ok +ok +Ti +Ti +VZ +dO +ma +ma +VZ +zU +zU +WL +VZ +Ks +zU +zU +jk +mT +zU +MJ +qP +zU +zU +VZ +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +ok +ok +ok +"} +(19,1,1) = {" +ok +ok +Ti +Ti +VZ +nO +JE +ma +QX +zU +zU +zU +QX +zU +dt +zU +qP +zU +mT +qP +qP +Br +zU +ZZ +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Cp +ok +ok +ok +"} +(20,1,1) = {" +ok +ok +Ti +Ti +VZ +AO +EY +Kb +VZ +zU +dt +WL +VZ +Ks +zU +zU +yP +mT +zU +qP +qP +zU +zU +ZZ +Ti +Ti +Ti +Ti +Ti +Ti +Cp +Cp +EM +ok +ok +"} +(21,1,1) = {" +ok +ok +Ti +Ti +VZ +VZ +VZ +VZ +VZ +QX +VZ +VZ +VZ +zU +zU +zU +qP +zU +mT +qP +qP +mT +zU +ZZ +Ti +Ti +Ti +Ti +Ti +Cp +Cp +Cp +EM +ok +ok +"} +(22,1,1) = {" +ok +ok +Ti +Ti +VZ +nj +zU +zU +zU +zU +zU +nj +VZ +VZ +QX +VZ +VZ +Ks +zU +zU +zU +zU +zU +VZ +Ti +Ti +Ti +Ti +Ti +Cp +Cp +Cp +EM +ok +ok +"} +(23,1,1) = {" +ok +ok +Ti +Ti +VZ +Gy +zU +zU +KF +zU +zU +nj +VZ +zU +zU +zU +zU +zU +zU +zU +zU +zU +zU +VZ +Ti +Ti +Ti +Ti +Cp +Cp +Cp +Cp +EM +ok +ok +"} +(24,1,1) = {" +ok +ok +Ti +Ti +VZ +nj +zU +zU +iJ +nU +zU +Wq +VZ +zU +zU +mT +zU +zU +mT +qP +qP +mT +dY +VZ +Ti +Ti +Ti +Ti +Cp +Cp +Cp +Cp +ok +ok +ok +"} +(25,1,1) = {" +ok +ok +Ti +Ti +VZ +nj +zU +nU +Zx +zU +zU +nj +VZ +Ks +mT +Xa +mT +zU +zU +qP +qP +zU +zU +VZ +Ti +Ti +Ti +Cp +Cp +Cp +Cp +Ti +ok +ok +ok +"} +(26,1,1) = {" +ok +ok +Ti +Ti +QX +zU +zU +zU +KF +zU +dt +nj +VZ +zU +zU +Xa +zU +zU +zU +lm +qP +mT +zU +ZZ +Ti +Ti +Cp +Cp +Cp +Cp +Ti +Ti +ok +ok +ok +"} +(27,1,1) = {" +ok +ok +Ti +Ti +VZ +Mx +zU +zU +fe +kD +zU +nj +VZ +zU +eM +WT +mT +zU +zU +qP +qP +zU +zU +ZZ +Ti +Ti +Cp +Cp +Cp +Cp +Ti +Ti +ok +ok +ok +"} +(28,1,1) = {" +ok +ok +Ti +Ti +VZ +YU +zU +zU +KF +zU +zU +Wq +VZ +zU +zU +Xa +or +zU +mT +qP +qP +fR +zU +ZZ +Ti +Ti +Cp +Cp +Cp +Cp +Ti +Ti +ok +ok +ok +"} +(29,1,1) = {" +ok +ok +Ti +Ti +VZ +ij +zU +zU +zU +zU +zU +nj +VZ +Ks +mT +Xa +mT +zU +zU +zU +zU +zU +zU +VZ +Ti +Ti +Ti +Cp +Ti +Ti +Ti +Ti +ok +ok +ok +"} +(30,1,1) = {" +ok +ok +Ti +Ti +VZ +fB +dt +zU +qh +jM +Wc +nj +VZ +zU +zU +mT +zU +zU +zU +zU +zU +zU +zU +VZ +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +ok +ok +ok +"} +(31,1,1) = {" +ok +ok +Ti +Ti +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +VZ +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +ok +ok +ok +"} +(32,1,1) = {" +ok +ok +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Wf +ok +ok +ok +"} +(33,1,1) = {" +ok +ok +Wf +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +Ti +ok +ok +ok +"} +(34,1,1) = {" +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +"} +(35,1,1) = {" +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +ok +"} diff --git a/maps/submaps/surface_submaps/wilderness/RaidedMechBunker.dmm b/maps/submaps/surface_submaps/wilderness/RaidedMechBunker.dmm new file mode 100644 index 0000000000..ac2b5b4d97 --- /dev/null +++ b/maps/submaps/surface_submaps/wilderness/RaidedMechBunker.dmm @@ -0,0 +1,618 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/simulated/mineral/ignore_mapgen, +/area/template_noop) +"b" = ( +/obj/machinery/door/airlock, +/turf/simulated/floor/tiled, +/area/submap/MechHanger) +"d" = ( +/turf/simulated/floor/tiled, +/area/submap/MechHanger) +"f" = ( +/turf/template_noop, +/area/submap/MechHanger) +"g" = ( +/obj/random/humanoidremains{ + spawn_nothing_percentage = 60 + }, +/obj/structure/table/bench/padded, +/turf/simulated/floor/tiled, +/area/submap/MechHanger) +"i" = ( +/turf/simulated/mineral/ignore_mapgen, +/area/submap/MechHanger) +"p" = ( +/turf/simulated/floor/tiled/red, +/area/submap/MechHanger) +"v" = ( +/obj/structure/table/standard, +/obj/random/firstaid, +/turf/simulated/floor/tiled, +/area/submap/MechHanger) +"x" = ( +/obj/effect/decal/mecha_wreckage/gygax, +/turf/simulated/floor/tiled/red, +/area/submap/MechHanger) +"y" = ( +/mob/living/simple_mob/mechanical/mecha/combat/phazon, +/turf/template_noop, +/area/submap/MechHanger) +"z" = ( +/obj/effect/decal/mecha_wreckage/durand, +/turf/simulated/floor/tiled/red, +/area/submap/MechHanger) +"A" = ( +/turf/template_noop, +/area/template_noop) +"G" = ( +/obj/structure/table/standard, +/obj/random/toolbox, +/turf/simulated/floor/tiled, +/area/submap/MechHanger) +"H" = ( +/turf/simulated/wall/r_wall, +/area/submap/MechHanger) +"J" = ( +/obj/structure/loot_pile/surface/alien/engineering, +/turf/simulated/floor/tiled, +/area/submap/MechHanger) +"M" = ( +/obj/effect/decal/mecha_wreckage/ripley/deathripley, +/turf/simulated/floor/tiled/red, +/area/submap/MechHanger) +"Y" = ( +/obj/effect/decal/mecha_wreckage/odysseus, +/turf/simulated/floor/tiled/red, +/area/submap/MechHanger) + +(1,1,1) = {" +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +"} +(2,1,1) = {" +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +"} +(3,1,1) = {" +A +A +A +A +a +a +a +a +A +A +A +A +A +A +a +a +A +A +A +A +"} +(4,1,1) = {" +A +A +A +i +i +i +i +i +i +f +f +f +f +i +i +i +i +A +A +A +"} +(5,1,1) = {" +A +A +a +H +H +H +H +H +H +i +f +f +i +i +i +i +i +a +A +A +"} +(6,1,1) = {" +A +A +a +H +d +d +g +J +H +i +f +f +i +i +i +i +i +A +A +A +"} +(7,1,1) = {" +A +a +a +H +d +v +G +d +H +i +i +f +y +i +i +i +f +A +A +A +"} +(8,1,1) = {" +A +a +a +H +d +d +d +d +H +i +i +f +f +f +f +f +f +A +A +A +"} +(9,1,1) = {" +A +a +a +H +H +b +H +H +H +i +i +f +f +f +f +f +f +A +A +A +"} +(10,1,1) = {" +A +a +a +H +x +d +d +p +H +i +i +i +f +f +f +f +f +a +a +A +"} +(11,1,1) = {" +A +a +a +H +d +d +d +d +H +i +i +i +f +f +f +f +i +a +a +a +"} +(12,1,1) = {" +A +a +a +H +M +d +d +p +H +i +i +i +i +f +f +f +i +a +a +a +"} +(13,1,1) = {" +A +A +a +H +d +d +d +d +H +i +i +i +f +f +f +i +i +a +a +A +"} +(14,1,1) = {" +A +A +a +H +z +d +d +Y +H +i +i +f +f +f +f +f +i +a +A +A +"} +(15,1,1) = {" +A +A +a +H +d +d +d +d +H +i +f +f +f +f +f +f +f +A +A +A +"} +(16,1,1) = {" +A +A +a +H +d +d +d +d +d +f +f +f +f +f +f +f +f +A +A +A +"} +(17,1,1) = {" +A +A +a +H +d +d +d +d +d +f +f +f +i +i +f +f +f +A +A +A +"} +(18,1,1) = {" +A +A +a +H +d +d +d +d +d +f +f +i +i +i +i +f +f +A +A +A +"} +(19,1,1) = {" +A +A +a +H +H +H +H +H +H +f +i +i +i +i +f +f +f +A +A +A +"} +(20,1,1) = {" +A +A +A +i +i +i +i +i +i +f +f +i +i +i +y +f +f +a +A +A +"} +(21,1,1) = {" +A +A +A +i +i +i +i +i +i +f +f +f +i +f +f +f +i +a +a +A +"} +(22,1,1) = {" +A +A +A +f +i +i +i +i +i +f +f +f +f +f +f +i +i +a +a +A +"} +(23,1,1) = {" +A +A +A +A +a +a +a +a +A +A +A +A +A +A +A +A +a +a +A +A +"} +(24,1,1) = {" +A +A +A +A +A +a +a +a +A +A +A +A +A +A +A +A +A +A +A +A +"} +(25,1,1) = {" +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +A +"} diff --git a/maps/submaps/surface_submaps/wilderness/borglab.dmm b/maps/submaps/surface_submaps/wilderness/borglab.dmm index 925cd8ac7e..2ef4b4544b 100644 --- a/maps/submaps/surface_submaps/wilderness/borglab.dmm +++ b/maps/submaps/surface_submaps/wilderness/borglab.dmm @@ -9,9 +9,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "ad" = ( /obj/effect/floor_decal/sign/c, @@ -53,9 +51,7 @@ /obj/machinery/door/blast/regular/open{ dir = 4 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "bL" = ( /turf/simulated/floor/outdoors/dirt{ @@ -109,17 +105,13 @@ /obj/machinery/door/blast/regular/open{ dir = 4 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "dT" = ( /obj/effect/floor_decal/rust, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "ej" = ( /obj/effect/floor_decal/industrial/warning{ @@ -194,9 +186,7 @@ /obj/random/junk, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "gS" = ( /obj/effect/floor_decal/rust/mono_rusted3, @@ -226,9 +216,7 @@ layer = 3.3; name = "Containment Door" }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "hW" = ( /obj/machinery/door/airlock/maintenance/common, @@ -273,9 +261,7 @@ "jf" = ( /obj/effect/floor_decal/rust, /obj/random/trash, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "jz" = ( /obj/machinery/light/small/emergency/flicker{ @@ -329,9 +315,7 @@ /obj/machinery/light/small/emergency/flicker{ dir = 1 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "lU" = ( /obj/machinery/chem_master, @@ -388,9 +372,7 @@ layer = 3.3; name = "Containment Door" }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "mE" = ( /obj/effect/floor_decal/techfloor/orange, @@ -416,17 +398,13 @@ layer = 3.3; name = "Containment Door" }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "nk" = ( /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "ny" = ( /obj/structure/curtain/open/shower, @@ -481,9 +459,7 @@ d2 = 2; icon_state = "0-2" }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "qa" = ( /obj/structure/table/standard, @@ -492,9 +468,7 @@ /turf/simulated/floor/tiled/dark, /area/submap/BorgLab) "qW" = ( -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "ra" = ( /obj/effect/floor_decal/industrial/warning{ @@ -517,22 +491,19 @@ /area/submap/BorgLab) "rP" = ( /obj/machinery/firealarm{ + alarms_hidden = 1; dir = 8; pixel_x = -24 }, /obj/random/junk, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "sr" = ( /turf/simulated/floor/outdoors/dirt, /area/template_noop) "sK" = ( /obj/structure/closet/crate/secure/loot, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "ta" = ( /obj/structure/bed/padded, @@ -542,9 +513,7 @@ }, /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "th" = ( /obj/effect/floor_decal/rust, @@ -561,9 +530,7 @@ /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust/color_rustedfull, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "tx" = ( /turf/simulated/floor/reinforced, @@ -571,9 +538,7 @@ "ty" = ( /obj/effect/floor_decal/rust, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "tX" = ( /obj/effect/wingrille_spawn/reinforced, @@ -581,9 +546,7 @@ /obj/machinery/door/blast/regular/open{ dir = 4 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "ub" = ( /obj/effect/floor_decal/industrial/warning, @@ -601,9 +564,7 @@ /obj/machinery/door/blast/regular/open{ dir = 4 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "uQ" = ( /obj/effect/gibspawner/human, @@ -631,9 +592,7 @@ layer = 3.3; name = "Containment Door" }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "xh" = ( /mob/living/simple_mob/vore/aggressive/corrupthound, @@ -642,9 +601,7 @@ /obj/effect/floor_decal/rust, /obj/effect/gibspawner/human, /obj/random/trash, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "xk" = ( /obj/structure/sign/warning/caution, @@ -684,9 +641,7 @@ layer = 3.3; name = "Containment Door" }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "yz" = ( /obj/effect/floor_decal/industrial/warning, @@ -708,9 +663,7 @@ /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "yR" = ( /obj/effect/floor_decal/industrial/warning{ @@ -746,9 +699,7 @@ /area/submap/BorgLab) "Bl" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Bq" = ( /mob/living/simple_mob/vore/aggressive/corrupthound, @@ -768,9 +719,7 @@ /obj/item/stack/material/phoron{ amount = 10 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "CA" = ( /obj/effect/floor_decal/rust, @@ -781,9 +730,7 @@ "CS" = ( /obj/effect/floor_decal/rust, /obj/effect/gibspawner/robot, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "CX" = ( /obj/structure/table/standard, @@ -847,16 +794,12 @@ /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, /obj/random/maintenance/research, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Gy" = ( /obj/random/maintenance/research, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Gz" = ( /mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi{ @@ -869,9 +812,7 @@ /area/submap/BorgLab) "GA" = ( /obj/machinery/door/airlock/maintenance/common, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "GC" = ( /obj/effect/floor_decal/industrial/warning{ @@ -928,18 +869,14 @@ layer = 3.3; name = "Containment Door" }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Jp" = ( /obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Jr" = ( /obj/effect/landmark/loot_spawn/low, @@ -971,9 +908,7 @@ /obj/machinery/door/blast/regular/open{ dir = 4 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "KX" = ( /mob/living/simple_mob/vore/aggressive/corrupthound, @@ -1003,9 +938,7 @@ layer = 3.3; name = "Containment Door" }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Lz" = ( /obj/structure/table/standard, @@ -1030,15 +963,11 @@ /obj/item/stack/material/phoron{ amount = 10 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "LC" = ( /obj/item/weapon/reagent_containers/food/snacks/sliceable/supremoburrito, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "MT" = ( /obj/machinery/space_heater, @@ -1055,9 +984,7 @@ /area/submap/BorgLab) "Nj" = ( /obj/effect/floor_decal/rust, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Nq" = ( /obj/effect/floor_decal/rust, @@ -1115,9 +1042,7 @@ pixel_y = 10 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Oq" = ( /obj/effect/floor_decal/rust, @@ -1126,13 +1051,12 @@ amount = 10 }, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Oz" = ( /obj/item/weapon/pickaxe/plasmacutter, /obj/machinery/firealarm{ + alarms_hidden = 1; pixel_y = 24 }, /obj/effect/floor_decal/rust, @@ -1143,18 +1067,14 @@ /obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/rust, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "OH" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/blast/regular/open{ dir = 4 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "OW" = ( /obj/structure/table/standard, @@ -1175,9 +1095,7 @@ "Pk" = ( /obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/rust, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "PW" = ( /obj/effect/floor_decal/industrial/warning, @@ -1213,9 +1131,7 @@ /obj/effect/floor_decal/industrial/warning, /mob/living/simple_mob/vore/aggressive/corrupthound, /obj/machinery/light/small/emergency/flicker, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "QW" = ( /obj/structure/closet/l3closet/general, @@ -1245,9 +1161,7 @@ dir = 1 }, /obj/effect/floor_decal/rust, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "RP" = ( /turf/simulated/floor/outdoors/dirt, @@ -1294,9 +1208,7 @@ }, /obj/effect/floor_decal/rust, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Tt" = ( /mob/living/simple_mob/mechanical/combat_drone/lesser{ @@ -1320,16 +1232,12 @@ "TN" = ( /obj/structure/closet/l3closet/virology, /obj/effect/floor_decal/rust, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "TU" = ( /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "TW" = ( /obj/effect/gibspawner/human, @@ -1379,9 +1287,7 @@ /obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "UW" = ( /obj/structure/window/reinforced{ @@ -1399,9 +1305,7 @@ /obj/machinery/door/blast/regular/open{ dir = 4 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Vc" = ( /obj/effect/floor_decal/industrial/warning, @@ -1430,9 +1334,7 @@ /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, /obj/item/frame/apc, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "VU" = ( /obj/effect/floor_decal/industrial/warning{ @@ -1441,9 +1343,7 @@ /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, /obj/effect/decal/cleanable/generic, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Wh" = ( /obj/effect/landmark/loot_spawn/low, @@ -1457,9 +1357,7 @@ /obj/effect/floor_decal/rust, /obj/effect/floor_decal/rust, /obj/item/weapon/broken_gun/laser_retro, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "WQ" = ( /turf/simulated/wall/r_wall, @@ -1482,9 +1380,7 @@ "Yk" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Yy" = ( /obj/structure/table/steel, @@ -1494,9 +1390,7 @@ /obj/effect/floor_decal/rust, /obj/random/maintenance/research, /obj/random/maintenance/research, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "YD" = ( /obj/effect/wingrille_spawn/reinforced, @@ -1506,17 +1400,13 @@ layer = 3.3; name = "Containment Door" }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "YZ" = ( /obj/effect/floor_decal/rust, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Za" = ( /obj/effect/floor_decal/rust, @@ -1530,9 +1420,7 @@ /area/submap/BorgLab) "Zn" = ( /obj/item/device/measuring_tape, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Zq" = ( /obj/machinery/door/window/brigdoor/westright{ @@ -1545,15 +1433,11 @@ /obj/machinery/door/blast/regular/open{ dir = 4 }, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Zt" = ( /obj/effect/wingrille_spawn/reinforced, -/turf/simulated/floor/plating{ - temperature = 293.15 - }, +/turf/simulated/floor/plating, /area/submap/BorgLab) "Zy" = ( /obj/effect/floor_decal/rust, diff --git a/maps/submaps/surface_submaps/wilderness/demonpool.dmm b/maps/submaps/surface_submaps/wilderness/demonpool.dmm index 5ff54b8ee1..65fcfc01c8 100644 --- a/maps/submaps/surface_submaps/wilderness/demonpool.dmm +++ b/maps/submaps/surface_submaps/wilderness/demonpool.dmm @@ -412,7 +412,7 @@ }, /area/submap/DemonPool) "EQ" = ( -/obj/structure/loot_pile/surface, +/obj/structure/loot_pile/surface/bones, /turf/simulated/floor/outdoors/dirt{ outdoors = 0 }, @@ -494,11 +494,6 @@ /obj/fire, /turf/simulated/floor/outdoors/dirt, /area/submap/DemonPool) -"Lx" = ( -/obj/effect/decal/cleanable/blood/gibs/body, -/obj/structure/loot_pile/surface, -/turf/simulated/floor/cult, -/area/submap/DemonPool) "LD" = ( /obj/structure/bonfire/permanent, /obj/structure/grille/cult, @@ -615,13 +610,9 @@ /turf/template_noop, /area/submap/DemonPool) "WV" = ( -/obj/structure/loot_pile/surface, +/obj/structure/loot_pile/surface/bones, /turf/simulated/floor/cult, /area/submap/DemonPool) -"WZ" = ( -/obj/structure/loot_pile/surface, -/turf/simulated/floor, -/area/submap/DemonPool) "Xe" = ( /obj/structure/grille/broken/cult, /turf/simulated/floor/outdoors/dirt{ @@ -969,7 +960,7 @@ Jo eR lG Zj -WZ +Ax Jo eR eR @@ -1138,7 +1129,7 @@ pH pH pH pH -Lx +es eR Jo Jo diff --git a/maps/submaps/surface_submaps/wilderness/emptycabin.dmm b/maps/submaps/surface_submaps/wilderness/emptycabin.dmm index 3d692b9d64..9008166129 100644 --- a/maps/submaps/surface_submaps/wilderness/emptycabin.dmm +++ b/maps/submaps/surface_submaps/wilderness/emptycabin.dmm @@ -174,7 +174,7 @@ /turf/simulated/floor/wood/sif, /area/submap/EmptyCabin) "R" = ( -/obj/structure/loot_pile/surface, +/obj/structure/loot_pile/maint/trash, /turf/template_noop, /area/template_noop) "T" = ( diff --git a/maps/submaps/surface_submaps/wilderness/syndisniper.dmm b/maps/submaps/surface_submaps/wilderness/syndisniper.dmm index 7de35e5062..d4a9bd18e1 100644 --- a/maps/submaps/surface_submaps/wilderness/syndisniper.dmm +++ b/maps/submaps/surface_submaps/wilderness/syndisniper.dmm @@ -33,9 +33,9 @@ /area/submap/SyndiSniper) "w" = ( /obj/structure/table/sifwooden_reinforced, +/obj/item/device/bluespaceradio/southerncross_prelinked, /obj/item/weapon/storage/mre/random, /obj/item/device/binoculars, -/obj/item/device/radio/bluespacehandset/linked/talon_prelinked, /turf/simulated/floor/outdoors/rocks, /area/submap/SyndiSniper) "B" = ( diff --git a/maps/submaps/surface_submaps/wilderness/wilderness.dm b/maps/submaps/surface_submaps/wilderness/wilderness.dm index 2c6e0b95f5..c91247f07f 100644 --- a/maps/submaps/surface_submaps/wilderness/wilderness.dm +++ b/maps/submaps/surface_submaps/wilderness/wilderness.dm @@ -1,406 +1,426 @@ -// This causes PoI maps to get 'checked' and compiled, when undergoing a unit test. -// This is so CI can validate PoIs, and ensure future changes don't break PoIs, as PoIs are loaded at runtime and the compiler can't catch errors. -// When adding a new PoI, please add it to this list. -#if MAP_TEST -#include "blackshuttledown.dmm" -#include "blueshuttledown.dmm" -#include "borglab.dmm" -#include "butchershack.dmm" -#include "caveS.dmm" -#include "chapel.dmm" -#include "chasm.dmm" -#include "Cragzone1.dmm" -#include "deathden.dmm" -#include "decoupledengine.dmm" -#include "demonpool.dmm" -#include "derelictengine.dmm" -#include "DJOutpost1.dmm" -#include "DJOutpost2.dmm" -#include "dogbase.dmm" -#include "doomP.dmm" -#include "drgnplateu.dmm" -#include "drugden.dmm" -#include "emptycabin.dmm" -#include "epod3.dmm" -#include "epod4.dmm" -#include "flake.dmm" -#include "frostflynest.dmm" -#include "frostoasis.dmm" -#include "govpatrol.dmm" -#include "greatwolfden.dmm" -#include "kururakden.dmm" -#include "lab1.dmm" -#include "leopardmanderden.dmm" -#include "lonewolf.dmm" -#include "manor1.dmm" -#include "mcamp1.dmm" -#include "MHR.dmm" -#include "mudpit.dmm" -#include "musk.dmm" -#include "otieshelter.dmm" -#include "rocky1.dmm" -#include "rocky2.dmm" -#include "rocky3.dmm" -#include "rocky4.dmm" -#include "rockybase.dmm" -#include "shack1.dmm" -#include "Shelter.dmm" -#include "smol1.dmm" -#include "snowrock1.dmm" -#include "spider1.dmm" -#include "syndisniper.dmm" -#include "wolfden.dmm" -#include "xenohive.dmm" -#endif - -//#include "Boombase.dmm" YW edit remove boombase - -// The 'wilderness' is the endgame for Explorers. Extremely dangerous and far away from help, but with vast shinies. -// POIs here spawn in two different sections, the top half and bottom half of the map. -// The top half connects to the outpost z-level, and is seperated from the bottom half by a river. It should provide a challenge to a well equiped Explorer team. -// The bottom half should be even more dangerous, where only the robust, fortunate, or lucky can survive. - -/datum/map_template/surface/wilderness - name = "Surface Content - Wildy" - desc = "Used to make the surface's wilderness be 17% less boring." - -// 'Normal' templates get used on the top half, and should be challenging. -/datum/map_template/surface/wilderness/normal - -// 'Deep' templates get used on the bottom half, and should be (even more) dangerous and rewarding. -/datum/map_template/surface/wilderness/deep - -// To be added: Templates for surface exploration when they are made. - -/datum/map_template/surface/wilderness/deep/BSD - name = "Black Shuttle Down" - desc = "You REALLY shouldn't be near this." - mappath = 'maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm' - cost = 30 - template_group = "Shuttle Down" - -/datum/map_template/surface/wilderness/deep/BluSD - name = "Blue Shuttle Down" - desc = "You REALLY shouldn't be near this. Mostly because they're Police." - mappath = 'maps/submaps/surface_submaps/wilderness/Blueshuttledown.dmm' - cost = 50 - template_group = "Shuttle Down" - -/datum/map_template/surface/wilderness/deep/borglab - name = "Borg Lab" - desc = "Production of experimental combat robots gone rogue." - mappath = 'maps/submaps/surface_submaps/wilderness/borglab.dmm' - cost = 30 - -/datum/map_template/surface/wilderness/normal/butchershack - name = "Butcher Shack" - desc = "An old, bloody butcher's shack. Get your meat here!" - mappath = 'maps/submaps/surface_submaps/wilderness/ButcherShack.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/deep/cave - name = "CaveS" - desc = "Chitter chitter!" - mappath = 'maps/submaps/surface_submaps/wilderness/CaveS.dmm' - cost = 20 - -/datum/map_template/surface/wilderness/deep/chapel - name = "Chapel 1" - desc = "The chapel of lights and a robot." - mappath = 'maps/submaps/surface_submaps/wilderness/Chapel.dmm' - cost = 20 - -/datum/map_template/surface/wilderness/normal/chasm - name = "Chasm" - desc = "An inconspicuous looking cave, watch your step." - mappath = 'maps/submaps/surface_submaps/wilderness/chasm.dmm' - cost = 20 - -/datum/map_template/surface/wilderness/normal/cragzone1 - name = "Cragzone 1" - desc = "Rocks and more rocks." - mappath = 'maps/submaps/surface_submaps/wilderness/Cragzone1.dmm' - cost = 5 - allow_duplicates = TRUE - -/datum/map_template/surface/wilderness/deep/deathden - name = "Death Den" - desc = "Gathering of acolytes gone wrong." - mappath = 'maps/submaps/surface_submaps/wilderness/deathden.dmm' - cost = 15 - -/datum/map_template/surface/wilderness/normal/decoupledengine - name = "Decoupled Engine" - desc = "A damaged fission engine jettisoned from a starship long ago." - mappath = 'maps/submaps/surface_submaps/wilderness/DecoupledEngine.dmm' - cost = 15 - -/datum/map_template/surface/wilderness/normal/demonpool - name = "Demon Pool" - desc = "A cult ritual gone horribly wrong." - mappath = 'maps/submaps/surface_submaps/wilderness/demonpool.dmm' - cost = 15 - -/datum/map_template/surface/wilderness/deep/derelictengine - name = "Derelict Engine" - desc = "An crashed alien ship, something went wrong inside." - mappath = 'maps/submaps/surface_submaps/wilderness/derelictengine.dmm' - cost = 45 - -/datum/map_template/surface/wilderness/deep/DJOutpost1 - name = "DJOutpost 1" - desc = "Home of Sif Free Radio, the best - and only - radio station for miles around." - mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm' - template_group = "Sif Free Radio" - cost = 5 - -/datum/map_template/surface/wilderness/deep/DJOutpost2 - name = "DJOutpost 2" - desc = "The cratered remains of Sif Free Radio, the best - and only - radio station for miles around." - mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost2.dmm' - template_group = "Sif Free Radio" - cost = 5 - -/datum/map_template/surface/wilderness/deep/DJOutpost3 - name = "DJOutpost 3" - desc = "The surprisingly high-tech home of Sif Free Radio, the best - and only - radio station for miles around." - mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost3.dmm' - template_group = "Sif Free Radio" - cost = 10 - -/datum/map_template/surface/wilderness/deep/DJOutpost4 - name = "DJOutpost 4" - desc = "The surprisingly high-tech home of Sif Free Radio, the only radio station run by mindless clones." - mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost4.dmm' - template_group = "Sif Free Radio" - cost = 10 - -/datum/map_template/surface/wilderness/deep/dogbase - name = "Dog Base" - desc = "A highly secured base with hungry trained canines" - mappath = 'maps/submaps/surface_submaps/wilderness/dogbase.dmm' - cost = 20 - -/datum/map_template/surface/wilderness/deep/doomP - name = "DoomP" - desc = "Witty description here." - mappath = 'maps/submaps/surface_submaps/wilderness/doomP.dmm' - cost = 30 - -/datum/map_template/surface/wilderness/deep/drgnplateu - name = "Dragon Plateu" - desc = "A dangerous plateu of cliffs home to a rampant gold hoarding dragon" - mappath = 'maps/submaps/surface_submaps/wilderness/drgnplateu.dmm' - cost = 15 - -/datum/map_template/surface/wilderness/normal/drugden - name = "Drug Den" - desc = "The remains of ill thought out whims." - mappath = 'maps/submaps/surface_submaps/wilderness/Drugden.dmm' - cost = 20 - -/datum/map_template/surface/wilderness/normal/emptycabin - name = "Empty Cabin" - desc = "An inconspicuous looking den hosted by a hungry otie" - mappath = 'maps/submaps/surface_submaps/wilderness/emptycabin.dmm' - cost = 10 - -/datum/map_template/surface/wilderness/deep/epod3 - name = "Emergency Pod 3" - desc = "A webbed Emergency pod in the middle of nowhere." - mappath = 'maps/submaps/surface_submaps/wilderness/Epod3.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/epod4 - name = "Emergency Pod 4" - desc = "A flooded Emergency pod in the middle of nowhere." - mappath = 'maps/submaps/surface_submaps/wilderness/Epod4.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/frostflynest - name = "Frostfly Nest" - desc = "The nest of a Frostfly, or more." - mappath = 'maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm' - cost = 20 - -/datum/map_template/surface/wilderness/normal/frostoasis - name = "Frost Oasis" - desc = "A strange oasis with a gathering of wild animals." - mappath = 'maps/submaps/surface_submaps/wilderness/frostoasis.dmm' - cost = 15 - -/datum/map_template/surface/wilderness/normal/flake - name = "Forest Lake" - desc = "A serene lake sitting amidst the surface." - mappath = 'maps/submaps/surface_submaps/wilderness/Flake.dmm' - cost = 10 - -/datum/map_template/surface/wilderness/normal/govpatrol - name = "Government Patrol" - desc = "A long lost SifGuard ground survey patrol. Now they have you guys!" - mappath = 'maps/submaps/surface_submaps/wilderness/GovPatrol.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/deep/greatwolfden - name = "Great Wolf Den" - desc = "Den hosted by the biggest alpha wolf of the wilderness" - mappath = 'maps/submaps/surface_submaps/wilderness/greatwolfden.dmm' - cost = 15 - -/datum/map_template/surface/wilderness/normal/kururakden - name = "Kururak Den" - desc = "The den of a Kururak pack. May contain hibernating members." - mappath = 'maps/submaps/surface_submaps/wilderness/kururakden.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/lab1 - name = "Lab 1" - desc = "An isolated small robotics lab." - mappath = 'maps/submaps/surface_submaps/wilderness/Lab1.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/deep/leopardmanderden - name = "Leopardmander Den" - desc = "Den of a voracious but very rare beast." - mappath = 'maps/submaps/surface_submaps/wilderness/leopardmanderden.dmm' - cost = 10 - -/datum/map_template/surface/wilderness/deep/lonewolf - name = "Lone Wolf" - desc = "A large oppressing wolf, supervising from above its cliff" - mappath = 'maps/submaps/surface_submaps/wilderness/lonewolf.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/deep/manor1 - name = "Manor 1" - desc = "Whodunit" - mappath = 'maps/submaps/surface_submaps/wilderness/manor1.dmm' - cost = 20 - -/datum/map_template/surface/wilderness/normal/Mcamp1 - name = "Military Camp 1" - desc = "A derelict military camp host to some unsavory dangers" - mappath = 'maps/submaps/surface_submaps/wilderness/MCamp1.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/mudpit - name = "Mudpit" - desc = "What happens when someone is a bit too careless with gas.." - mappath = 'maps/submaps/surface_submaps/wilderness/Mudpit.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/musk - name = "Musk" - desc = "0 to 60 in 1.9 seconds." - mappath = 'maps/submaps/surface_submaps/wilderness/musk.dmm' - cost = 10 - -/datum/map_template/surface/wilderness/deep/otieshelter - name = "Otie Shelter" - desc = "A experimental lab of various breeds of oties" - mappath = 'maps/submaps/surface_submaps/wilderness/otieshelter.dmm' - cost = 15 - -/datum/map_template/surface/wilderness/normal/rocky1 - name = "Rocky 1" - desc = "DununanununanununuNAnana" - mappath = 'maps/submaps/surface_submaps/wilderness/rocky1.dmm' - allow_duplicates = TRUE - cost = 5 - -/datum/map_template/surface/wilderness/normal/rocky2 - name = "Rocky 2" - desc = "More rocks." - mappath = 'maps/submaps/surface_submaps/wilderness/rocky2.dmm' - allow_duplicates = TRUE - cost = 5 - -/datum/map_template/surface/wilderness/normal/Rocky3 - name = "Rocky 3" - desc = "More and more and more rocks." - mappath = 'maps/submaps/surface_submaps/wilderness/rocky3.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/rocky4 - name = "Rocky 4" - desc = "An interesting geographic formation." - mappath = 'maps/submaps/surface_submaps/wilderness/rocky4.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/deep/rockybase - name = "Rocky Base" - desc = "A guide to upsetting Icarus and the EIO" - mappath = 'maps/submaps/surface_submaps/wilderness/rockybase.dmm' - cost = 35 - -/datum/map_template/surface/wilderness/normal/shack1 - name = "Shack 1" - desc = "A small shack in the middle of nowhere, Your halloween murder happens here" - mappath = 'maps/submaps/surface_submaps/wilderness/shack1.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/shelter1 - name = "Shelter 1" - desc = "The remains of a resourceful, but prideful explorer." - mappath = 'maps/submaps/surface_submaps/wilderness/Shelter.dmm' - cost = 10 - -/datum/map_template/surface/wilderness/normal/smol1 - name = "Smol 1" - desc = "A tiny grove of trees, The Nemesis of thicc" - mappath = 'maps/submaps/surface_submaps/wilderness/Smol1.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/snowrock1 - name = "Snowrock 1" - desc = "A rocky snow covered area" - mappath = 'maps/submaps/surface_submaps/wilderness/Snowrock1.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/spider1 - name = "Spider Nest 1" - desc = "A small spider nest, in the forest." - mappath = 'maps/submaps/surface_submaps/wilderness/spider1.dmm' - allow_duplicates = TRUE - cost = 5 - -/datum/map_template/surface/wilderness/deep/syndisniper - name = "Syndi Sniper" - desc = "Syndicate watch tower, deadly but secluded" - mappath = 'maps/submaps/surface_submaps/wilderness/syndisniper.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/wolfden - name = "Wolf Den" - desc = "Small wolf den and their hunt spoils." - mappath = 'maps/submaps/surface_submaps/wilderness/wolfden.dmm' - cost = 10 - -/datum/map_template/surface/wilderness/deep/xenohive - name = "Xeno Hive" - desc = "A containment experiment gone wrong." - mappath = 'maps/submaps/surface_submaps/wilderness/xenohive.dmm' - cost = 25 - - -/*==Disabled==/ - -/datum/map_template/surface/wilderness/deep/Boombase //YW Edit remove boombase - name = "Boombase" - desc = "What happens when you don't follow SOP." - mappath = 'maps/submaps/surface_submaps/wilderness/Boombase.dmm' - cost = 5 - -/datum/map_template/surface/wilderness/normal/chemspill2 - name = "Acrid Lake" - desc = "A pool of water contaminated with highly dangerous chemicals." - mappath = 'maps/submaps/surface_submaps/wilderness/chemspill2.dmm' - cost = 10 - -/datum/map_template/surface/wilderness/deep/MHR - name = "Manhack Rock" - desc = "A rock filled with nasty Synthetics." - mappath = 'maps/submaps/surface_submaps/wilderness/MHR.dmm' - cost = 15 - -*/ +// This causes PoI maps to get 'checked' and compiled, when undergoing a unit test. +// This is so CI can validate PoIs, and ensure future changes don't break PoIs, as PoIs are loaded at runtime and the compiler can't catch errors. +// When adding a new PoI, please add it to this list. +#if MAP_TEST +#include "blackshuttledown.dmm" +#include "blueshuttledown.dmm" +#include "borglab.dmm" +#include "butchershack.dmm" +#include "caveS.dmm" +#include "chapel.dmm" +#include "chasm.dmm" +#include "Cragzone1.dmm" +#include "deathden.dmm" +#include "decoupledengine.dmm" +#include "demonpool.dmm" +#include "derelictengine.dmm" +#include "DJOutpost1.dmm" +#include "DJOutpost2.dmm" +#include "dogbase.dmm" +#include "doomP.dmm" +#include "drgnplateu.dmm" +#include "drugden.dmm" +#include "emptycabin.dmm" +#include "epod3.dmm" +#include "epod4.dmm" +#include "flake.dmm" +#include "frostflynest.dmm" +#include "frostoasis.dmm" +#include "govpatrol.dmm" +#include "greatwolfden.dmm" +#include "kururakden.dmm" +#include "lab1.dmm" +#include "leopardmanderden.dmm" +#include "lonewolf.dmm" +#include "manor1.dmm" +#include "mcamp1.dmm" +#include "MHR.dmm" +#include "mudpit.dmm" +#include "musk.dmm" +#include "otieshelter.dmm" +#include "rocky1.dmm" +#include "rocky2.dmm" +#include "rocky3.dmm" +#include "rocky4.dmm" +#include "rockybase.dmm" +#include "shack1.dmm" +#include "Shelter.dmm" +#include "smol1.dmm" +#include "snowrock1.dmm" +#include "spider1.dmm" +#include "syndisniper.dmm" +#include "wolfden.dmm" +#include "xenohive.dmm" +#include "AmbushBase.dmm" +#include "CultBar.dmm" +#include "RaidedMechBunker.dmm" +#endif + +//#include "Boombase.dmm" YW edit remove boombase + +// The 'wilderness' is the endgame for Explorers. Extremely dangerous and far away from help, but with vast shinies. +// POIs here spawn in two different sections, the top half and bottom half of the map. +// The top half connects to the outpost z-level, and is seperated from the bottom half by a river. It should provide a challenge to a well equiped Explorer team. +// The bottom half should be even more dangerous, where only the robust, fortunate, or lucky can survive. + +/datum/map_template/surface/wilderness + name = "Surface Content - Wildy" + desc = "Used to make the surface's wilderness be 17% less boring." + +// 'Normal' templates get used on the top half, and should be challenging. +/datum/map_template/surface/wilderness/normal + +// 'Deep' templates get used on the bottom half, and should be (even more) dangerous and rewarding. +/datum/map_template/surface/wilderness/deep + +// To be added: Templates for surface exploration when they are made. + +/datum/map_template/surface/wilderness/deep/BSD + name = "Black Shuttle Down" + desc = "You REALLY shouldn't be near this." + mappath = 'maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm' + cost = 30 + template_group = "Shuttle Down" + +/datum/map_template/surface/wilderness/deep/BluSD + name = "Blue Shuttle Down" + desc = "You REALLY shouldn't be near this. Mostly because they're Police." + mappath = 'maps/submaps/surface_submaps/wilderness/Blueshuttledown.dmm' + cost = 50 + template_group = "Shuttle Down" + +/datum/map_template/surface/wilderness/deep/borglab + name = "Borg Lab" + desc = "Production of experimental combat robots gone rogue." + mappath = 'maps/submaps/surface_submaps/wilderness/borglab.dmm' + cost = 30 + +/datum/map_template/surface/wilderness/normal/butchershack + name = "Butcher Shack" + desc = "An old, bloody butcher's shack. Get your meat here!" + mappath = 'maps/submaps/surface_submaps/wilderness/ButcherShack.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/deep/cave + name = "CaveS" + desc = "Chitter chitter!" + mappath = 'maps/submaps/surface_submaps/wilderness/CaveS.dmm' + cost = 20 + +/datum/map_template/surface/wilderness/deep/chapel + name = "Chapel 1" + desc = "The chapel of lights and a robot." + mappath = 'maps/submaps/surface_submaps/wilderness/Chapel.dmm' + cost = 20 + +/datum/map_template/surface/wilderness/normal/chasm + name = "Chasm" + desc = "An inconspicuous looking cave, watch your step." + mappath = 'maps/submaps/surface_submaps/wilderness/chasm.dmm' + cost = 20 + +/datum/map_template/surface/wilderness/normal/cragzone1 + name = "Cragzone 1" + desc = "Rocks and more rocks." + mappath = 'maps/submaps/surface_submaps/wilderness/Cragzone1.dmm' + cost = 5 + allow_duplicates = TRUE + +/datum/map_template/surface/wilderness/deep/deathden + name = "Death Den" + desc = "Gathering of acolytes gone wrong." + mappath = 'maps/submaps/surface_submaps/wilderness/deathden.dmm' + cost = 15 + +/datum/map_template/surface/wilderness/normal/decoupledengine + name = "Decoupled Engine" + desc = "A damaged fission engine jettisoned from a starship long ago." + mappath = 'maps/submaps/surface_submaps/wilderness/DecoupledEngine.dmm' + cost = 15 + +/datum/map_template/surface/wilderness/normal/demonpool + name = "Demon Pool" + desc = "A cult ritual gone horribly wrong." + mappath = 'maps/submaps/surface_submaps/wilderness/demonpool.dmm' + cost = 15 + +/datum/map_template/surface/wilderness/deep/derelictengine + name = "Derelict Engine" + desc = "An crashed alien ship, something went wrong inside." + mappath = 'maps/submaps/surface_submaps/wilderness/derelictengine.dmm' + cost = 45 + +/datum/map_template/surface/wilderness/deep/DJOutpost1 + name = "DJOutpost 1" + desc = "Home of Sif Free Radio, the best - and only - radio station for miles around." + mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm' + template_group = "Sif Free Radio" + cost = 5 + +/datum/map_template/surface/wilderness/deep/DJOutpost2 + name = "DJOutpost 2" + desc = "The cratered remains of Sif Free Radio, the best - and only - radio station for miles around." + mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost2.dmm' + template_group = "Sif Free Radio" + cost = 5 + +/datum/map_template/surface/wilderness/deep/DJOutpost3 + name = "DJOutpost 3" + desc = "The surprisingly high-tech home of Sif Free Radio, the best - and only - radio station for miles around." + mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost3.dmm' + template_group = "Sif Free Radio" + cost = 10 + +/datum/map_template/surface/wilderness/deep/DJOutpost4 + name = "DJOutpost 4" + desc = "The surprisingly high-tech home of Sif Free Radio, the only radio station run by mindless clones." + mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost4.dmm' + template_group = "Sif Free Radio" + cost = 10 + +/datum/map_template/surface/wilderness/deep/dogbase + name = "Dog Base" + desc = "A highly secured base with hungry trained canines" + mappath = 'maps/submaps/surface_submaps/wilderness/dogbase.dmm' + cost = 20 + +/datum/map_template/surface/wilderness/deep/doomP + name = "DoomP" + desc = "Witty description here." + mappath = 'maps/submaps/surface_submaps/wilderness/doomP.dmm' + cost = 30 + +/datum/map_template/surface/wilderness/deep/drgnplateu + name = "Dragon Plateu" + desc = "A dangerous plateu of cliffs home to a rampant gold hoarding dragon" + mappath = 'maps/submaps/surface_submaps/wilderness/drgnplateu.dmm' + cost = 15 + +/datum/map_template/surface/wilderness/normal/drugden + name = "Drug Den" + desc = "The remains of ill thought out whims." + mappath = 'maps/submaps/surface_submaps/wilderness/Drugden.dmm' + cost = 20 + +/datum/map_template/surface/wilderness/normal/emptycabin + name = "Empty Cabin" + desc = "An inconspicuous looking den hosted by a hungry otie" + mappath = 'maps/submaps/surface_submaps/wilderness/emptycabin.dmm' + cost = 10 + +/datum/map_template/surface/wilderness/deep/epod3 + name = "Emergency Pod 3" + desc = "A webbed Emergency pod in the middle of nowhere." + mappath = 'maps/submaps/surface_submaps/wilderness/Epod3.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/epod4 + name = "Emergency Pod 4" + desc = "A flooded Emergency pod in the middle of nowhere." + mappath = 'maps/submaps/surface_submaps/wilderness/Epod4.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/frostflynest + name = "Frostfly Nest" + desc = "The nest of a Frostfly, or more." + mappath = 'maps/submaps/surface_submaps/wilderness/FrostflyNest.dmm' + cost = 20 + +/datum/map_template/surface/wilderness/normal/frostoasis + name = "Frost Oasis" + desc = "A strange oasis with a gathering of wild animals." + mappath = 'maps/submaps/surface_submaps/wilderness/frostoasis.dmm' + cost = 15 + +/datum/map_template/surface/wilderness/normal/flake + name = "Forest Lake" + desc = "A serene lake sitting amidst the surface." + mappath = 'maps/submaps/surface_submaps/wilderness/Flake.dmm' + cost = 10 + +/datum/map_template/surface/wilderness/normal/govpatrol + name = "Government Patrol" + desc = "A long lost SifGuard ground survey patrol. Now they have you guys!" + mappath = 'maps/submaps/surface_submaps/wilderness/GovPatrol.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/deep/greatwolfden + name = "Great Wolf Den" + desc = "Den hosted by the biggest alpha wolf of the wilderness" + mappath = 'maps/submaps/surface_submaps/wilderness/greatwolfden.dmm' + cost = 15 + +/datum/map_template/surface/wilderness/normal/kururakden + name = "Kururak Den" + desc = "The den of a Kururak pack. May contain hibernating members." + mappath = 'maps/submaps/surface_submaps/wilderness/kururakden.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/lab1 + name = "Lab 1" + desc = "An isolated small robotics lab." + mappath = 'maps/submaps/surface_submaps/wilderness/Lab1.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/deep/leopardmanderden + name = "Leopardmander Den" + desc = "Den of a voracious but very rare beast." + mappath = 'maps/submaps/surface_submaps/wilderness/leopardmanderden.dmm' + cost = 10 + +/datum/map_template/surface/wilderness/deep/lonewolf + name = "Lone Wolf" + desc = "A large oppressing wolf, supervising from above its cliff" + mappath = 'maps/submaps/surface_submaps/wilderness/lonewolf.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/deep/manor1 + name = "Manor 1" + desc = "Whodunit" + mappath = 'maps/submaps/surface_submaps/wilderness/manor1.dmm' + cost = 20 + +/datum/map_template/surface/wilderness/normal/Mcamp1 + name = "Military Camp 1" + desc = "A derelict military camp host to some unsavory dangers" + mappath = 'maps/submaps/surface_submaps/wilderness/MCamp1.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/mudpit + name = "Mudpit" + desc = "What happens when someone is a bit too careless with gas.." + mappath = 'maps/submaps/surface_submaps/wilderness/Mudpit.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/musk + name = "Musk" + desc = "0 to 60 in 1.9 seconds." + mappath = 'maps/submaps/surface_submaps/wilderness/musk.dmm' + cost = 10 + +/datum/map_template/surface/wilderness/deep/otieshelter + name = "Otie Shelter" + desc = "A experimental lab of various breeds of oties" + mappath = 'maps/submaps/surface_submaps/wilderness/otieshelter.dmm' + cost = 15 + +/datum/map_template/surface/wilderness/normal/rocky1 + name = "Rocky 1" + desc = "DununanununanununuNAnana" + mappath = 'maps/submaps/surface_submaps/wilderness/rocky1.dmm' + allow_duplicates = TRUE + cost = 5 + +/datum/map_template/surface/wilderness/normal/rocky2 + name = "Rocky 2" + desc = "More rocks." + mappath = 'maps/submaps/surface_submaps/wilderness/rocky2.dmm' + allow_duplicates = TRUE + cost = 5 + +/datum/map_template/surface/wilderness/normal/Rocky3 + name = "Rocky 3" + desc = "More and more and more rocks." + mappath = 'maps/submaps/surface_submaps/wilderness/rocky3.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/rocky4 + name = "Rocky 4" + desc = "An interesting geographic formation." + mappath = 'maps/submaps/surface_submaps/wilderness/rocky4.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/deep/rockybase + name = "Rocky Base" + desc = "A guide to upsetting Icarus and the EIO" + mappath = 'maps/submaps/surface_submaps/wilderness/rockybase.dmm' + cost = 35 + +/datum/map_template/surface/wilderness/normal/shack1 + name = "Shack 1" + desc = "A small shack in the middle of nowhere, Your halloween murder happens here" + mappath = 'maps/submaps/surface_submaps/wilderness/shack1.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/shelter1 + name = "Shelter 1" + desc = "The remains of a resourceful, but prideful explorer." + mappath = 'maps/submaps/surface_submaps/wilderness/Shelter.dmm' + cost = 10 + +/datum/map_template/surface/wilderness/normal/smol1 + name = "Smol 1" + desc = "A tiny grove of trees, The Nemesis of thicc" + mappath = 'maps/submaps/surface_submaps/wilderness/Smol1.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/snowrock1 + name = "Snowrock 1" + desc = "A rocky snow covered area" + mappath = 'maps/submaps/surface_submaps/wilderness/Snowrock1.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/spider1 + name = "Spider Nest 1" + desc = "A small spider nest, in the forest." + mappath = 'maps/submaps/surface_submaps/wilderness/spider1.dmm' + allow_duplicates = TRUE + cost = 5 + +/datum/map_template/surface/wilderness/deep/syndisniper + name = "Syndi Sniper" + desc = "Syndicate watch tower, deadly but secluded" + mappath = 'maps/submaps/surface_submaps/wilderness/syndisniper.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/wolfden + name = "Wolf Den" + desc = "Small wolf den and their hunt spoils." + mappath = 'maps/submaps/surface_submaps/wilderness/wolfden.dmm' + cost = 10 + +/datum/map_template/surface/wilderness/deep/xenohive + name = "Xeno Hive" + desc = "A containment experiment gone wrong." + mappath = 'maps/submaps/surface_submaps/wilderness/xenohive.dmm' + cost = 25 + +/datum/map_template/surface/wilderness/deep/cultbar + name = "Cult Bar" + desc = "A bar surronded by demons, for those of the occult." + mappath = 'maps/submaps/surface_submaps/wilderness/CultBar.dmm' + cost = 20 + +/datum/map_template/surface/wilderness/deep/cliffbase + name = "Cliff Base" + desc = "A hideout protected by a lake, and duo of snipers." + mappath = 'maps/submaps/surface_submaps/wilderness/AmbushBase.dmm' + cost = 30 + +/datum/map_template/surface/wilderness/deep/raideddmechhanger + name = "Raided Mech Hanger" + desc = "A hanger with mechs far past useabiltiy." + mappath = 'maps/submaps/surface_submaps/wilderness/RaidedMechBunker.dmm' + cost = 10 + +/*==Disabled==/ + +/datum/map_template/surface/wilderness/deep/Boombase //YW Edit remove boombase + name = "Boombase" + desc = "What happens when you don't follow SOP." + mappath = 'maps/submaps/surface_submaps/wilderness/Boombase.dmm' + cost = 5 + +/datum/map_template/surface/wilderness/normal/chemspill2 + name = "Acrid Lake" + desc = "A pool of water contaminated with highly dangerous chemicals." + mappath = 'maps/submaps/surface_submaps/wilderness/chemspill2.dmm' + cost = 10 + +/datum/map_template/surface/wilderness/deep/MHR + name = "Manhack Rock" + desc = "A rock filled with nasty Synthetics." + mappath = 'maps/submaps/surface_submaps/wilderness/MHR.dmm' + cost = 15 + +*/ diff --git a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm index 0c5ce2e12e..9aa378c466 100644 --- a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm +++ b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm @@ -1,213 +1,225 @@ -/area/submap - name = "Submap Area" - icon_state = "submap" - flags = RAD_SHIELDED - ambience = AMBIENCE_RUINS - secret_name = TRUE - forbid_events = TRUE - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/submap/event //To be used for Events not for regular PoIs - name = "Unknown" - requires_power = FALSE - -/area/submap/Blackshuttledown - name = "POI - Black-Operative Shuttle" - requires_power = FALSE - ambience = AMBIENCE_HIGHSEC - -/area/submap/BoomBase - name = "POI - Lab Crater" - ambience = AMBIENCE_FOREBODING - -/area/submap/BorgLab - name = "POI - Borg Lab" - ambience = AMBIENCE_HIGHSEC - -/area/submap/ButcherShack - name = "POI - Butcher's Shack" - ambience = AMBIENCE_RUINS - -/area/submap/CaveS - name = "POI - Spider Cave" - ambience = AMBIENCE_FOREBODING - -/area/submap/Chapel1 - name = "POI - Abandoned Chapel" - ambience = AMBIENCE_RUINS - -/area/submap/Chasm - name = "POI - Chasm" - ambience = AMBIENCE_SPACE - -/area/submap/ChemSpill2 - name = "POI - Acrid Lake" - ambience = AMBIENCE_FOREBODING - -/area/submap/DeathDen - name = "POI - Death Den" - ambience = AMBIENCE_FOREBODING - -/area/submap/DecoupledEngine - name = "POI - Decoupled Engine" - ambience = AMBIENCE_FOREBODING - -/area/submap/DemonPool - name = "POI - Demon Pool" - ambience = AMBIENCE_GHOSTLY - -/area/submap/DerelictEngine - name = "POI - Derelict Engine" - ambience = AMBIENCE_OTHERWORLDLY - -/area/submap/DoomP - name = "POI - Fortified Base" - ambience = AMBIENCE_HIGHSEC - -/area/submap/drgnplateu - name = "POI - Dragon Plateu" - ambience = AMBIENCE_SIF - -/area/submap/Drugd - name = "POI - Drug Den" - ambience = AMBIENCE_FOREBODING - -/area/submap/Cragzone1 - name = "Craggy Area" - ambience = AMBIENCE_SIF - -/area/submap/Epod3 - name = "POI - Infested Escape Pod" - ambience = AMBIENCE_FOREBODING - -/area/submap/Epod4 - name = "POI - Flooded Escape Pod" - ambience = AMBIENCE_FOREBODING - -/area/submap/FrostflyNest - name = "POI - Frostfly Nest" - ambience = AMBIENCE_SIF - -/area/submap/FrostOasis - name = "POI - Frost Oasis" - ambience = AMBIENCE_SIF - -/area/submap/DogBase - name = "POI - Dog Base" - ambience = AMBIENCE_HIGHSEC - -/area/submap/DJOutpost1 - name = "POI - Radio Outpost" - ambience = AMBIENCE_TECH_RUINS - -/area/submap/DJOutpost2 - name = "POI - Abandoned Radio Outpost" - ambience = AMBIENCE_GHOSTLY - -/area/submap/EmptyCabin - name = "POI - Empty Cabin" - ambience = AMBIENCE_GHOSTLY - -/area/submap/Field1 - name = "POI - Field" - ambience = AMBIENCE_SIF - -/area/submap/KururakDen - name = "POI - Kururak Den" - ambience = AMBIENCE_SIF - -/area/submap/GreatWolfDen - name = "POI - Great Wolf Den" - ambience = AMBIENCE_SIF - -/area/submap/GovPatrol - name = "POI - Lost Government Patrol" - ambience = AMBIENCE_GHOSTLY - -/area/submap/Lab1 - name = "POI - Remote Lab" - ambience = AMBIENCE_RUINS - -/area/submap/Lake1 - name = "POI - Lake" - ambience = AMBIENCE_SIF - -/area/submap/LeopardmanderDen - name = "POI - Leopardmander Den" - ambience = AMBIENCE_OTHERWORLDLY - -/area/submap/lonewolf - name = "POI - Lone Wolf" - ambience = AMBIENCE_OTHERWORLDLY - -/area/submap/Manor1 - name = "POI - Manor House" - ambience = AMBIENCE_FOREBODING - -/area/submap/MHR - name = "POI - Manhack Rock" - ambience = AMBIENCE_FOREBODING - -/area/submap/MilitaryCamp1 - name = "POI - Military Camp" - ambience = AMBIENCE_HIGHSEC - -/area/submap/Mudpit - name = "POI - Mudpit" - ambience = AMBIENCE_SIF - -/area/submap/OtieShelter - name = "POI - Otie Shelter" - ambience = AMBIENCE_HIGHSEC - -/area/submap/Rocky1 - name = "POI - Rocky Demise" - ambience = AMBIENCE_SIF - -/area/submap/Rocky2 - name = "Rocky Crevice" - ambience = AMBIENCE_SIF - -/area/submap/Rocky3 - name = "Rocky Valley" - ambience = AMBIENCE_SIF - -/area/submap/Rocky4 - name = "Rocky Pond" - ambience = AMBIENCE_SIF - -/area/submap/Rockybase - name = "POI - Rocky Base" - ambience = AMBIENCE_HIGHSEC - -/area/submap/Shack1 - name = "POI - Shack" - ambience = AMBIENCE_RUINS - -/area/submap/Shelter1 - name = "POI - Raided Shelter" - ambience = AMBIENCE_GHOSTLY - -/area/submap/Small1 - name = "Snowy Thicket" - ambience = AMBIENCE_SIF - -/area/submap/SnowR1 - name = "POI - Rocky Overhang" - ambience = AMBIENCE_SIF - -/area/submap/spider1 - name = "POI - Spider Nest" - ambience = AMBIENCE_FOREBODING - -/area/submap/SyndiSniper - name = "POI - Syndi Sniper" - ambience = AMBIENCE_SIF - -/area/submap/WolfDen - name = "POI - Wolf Den" - ambience = AMBIENCE_SIF - -/area/submap/XenoHive - name = "POI - Xeno Hive" - ambience = AMBIENCE_RUINS +/area/submap + name = "Submap Area" + icon_state = "submap" + flags = RAD_SHIELDED + ambience = AMBIENCE_RUINS + secret_name = TRUE + forbid_events = TRUE + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/submap/event //To be used for Events not for regular PoIs + name = "Unknown" + requires_power = FALSE + +/area/submap/Blackshuttledown + name = "POI - Black-Operative Shuttle" + requires_power = FALSE + ambience = AMBIENCE_HIGHSEC + +/area/submap/BoomBase + name = "POI - Lab Crater" + ambience = AMBIENCE_FOREBODING + +/area/submap/BorgLab + name = "POI - Borg Lab" + ambience = AMBIENCE_HIGHSEC + +/area/submap/ButcherShack + name = "POI - Butcher's Shack" + ambience = AMBIENCE_RUINS + +/area/submap/CaveS + name = "POI - Spider Cave" + ambience = AMBIENCE_FOREBODING + +/area/submap/Chapel1 + name = "POI - Abandoned Chapel" + ambience = AMBIENCE_RUINS + +/area/submap/Chasm + name = "POI - Chasm" + ambience = AMBIENCE_SPACE + +/area/submap/ChemSpill2 + name = "POI - Acrid Lake" + ambience = AMBIENCE_FOREBODING + +/area/submap/DeathDen + name = "POI - Death Den" + ambience = AMBIENCE_FOREBODING + +/area/submap/DecoupledEngine + name = "POI - Decoupled Engine" + ambience = AMBIENCE_FOREBODING + +/area/submap/DemonPool + name = "POI - Demon Pool" + ambience = AMBIENCE_GHOSTLY + +/area/submap/DerelictEngine + name = "POI - Derelict Engine" + ambience = AMBIENCE_OTHERWORLDLY + +/area/submap/DoomP + name = "POI - Fortified Base" + ambience = AMBIENCE_HIGHSEC + +/area/submap/drgnplateu + name = "POI - Dragon Plateu" + ambience = AMBIENCE_SIF + +/area/submap/Drugd + name = "POI - Drug Den" + ambience = AMBIENCE_FOREBODING + +/area/submap/Cragzone1 + name = "Craggy Area" + ambience = AMBIENCE_SIF + +/area/submap/Epod3 + name = "POI - Infested Escape Pod" + ambience = AMBIENCE_FOREBODING + +/area/submap/Epod4 + name = "POI - Flooded Escape Pod" + ambience = AMBIENCE_FOREBODING + +/area/submap/FrostflyNest + name = "POI - Frostfly Nest" + ambience = AMBIENCE_SIF + +/area/submap/FrostOasis + name = "POI - Frost Oasis" + ambience = AMBIENCE_SIF + +/area/submap/DogBase + name = "POI - Dog Base" + ambience = AMBIENCE_HIGHSEC + +/area/submap/DJOutpost1 + name = "POI - Radio Outpost" + ambience = AMBIENCE_TECH_RUINS + +/area/submap/DJOutpost2 + name = "POI - Abandoned Radio Outpost" + ambience = AMBIENCE_GHOSTLY + +/area/submap/EmptyCabin + name = "POI - Empty Cabin" + ambience = AMBIENCE_GHOSTLY + +/area/submap/Field1 + name = "POI - Field" + ambience = AMBIENCE_SIF + +/area/submap/KururakDen + name = "POI - Kururak Den" + ambience = AMBIENCE_SIF + +/area/submap/GreatWolfDen + name = "POI - Great Wolf Den" + ambience = AMBIENCE_SIF + +/area/submap/GovPatrol + name = "POI - Lost Government Patrol" + ambience = AMBIENCE_GHOSTLY + +/area/submap/Lab1 + name = "POI - Remote Lab" + ambience = AMBIENCE_RUINS + +/area/submap/Lake1 + name = "POI - Lake" + ambience = AMBIENCE_SIF + +/area/submap/LeopardmanderDen + name = "POI - Leopardmander Den" + ambience = AMBIENCE_OTHERWORLDLY + +/area/submap/lonewolf + name = "POI - Lone Wolf" + ambience = AMBIENCE_OTHERWORLDLY + +/area/submap/Manor1 + name = "POI - Manor House" + ambience = AMBIENCE_FOREBODING + +/area/submap/MHR + name = "POI - Manhack Rock" + ambience = AMBIENCE_FOREBODING + +/area/submap/MilitaryCamp1 + name = "POI - Military Camp" + ambience = AMBIENCE_HIGHSEC + +/area/submap/Mudpit + name = "POI - Mudpit" + ambience = AMBIENCE_SIF + +/area/submap/OtieShelter + name = "POI - Otie Shelter" + ambience = AMBIENCE_HIGHSEC + +/area/submap/Rocky1 + name = "POI - Rocky Demise" + ambience = AMBIENCE_SIF + +/area/submap/Rocky2 + name = "Rocky Crevice" + ambience = AMBIENCE_SIF + +/area/submap/Rocky3 + name = "Rocky Valley" + ambience = AMBIENCE_SIF + +/area/submap/Rocky4 + name = "Rocky Pond" + ambience = AMBIENCE_SIF + +/area/submap/Rockybase + name = "POI - Rocky Base" + ambience = AMBIENCE_HIGHSEC + +/area/submap/Shack1 + name = "POI - Shack" + ambience = AMBIENCE_RUINS + +/area/submap/Shelter1 + name = "POI - Raided Shelter" + ambience = AMBIENCE_GHOSTLY + +/area/submap/Small1 + name = "Snowy Thicket" + ambience = AMBIENCE_SIF + +/area/submap/SnowR1 + name = "POI - Rocky Overhang" + ambience = AMBIENCE_SIF + +/area/submap/spider1 + name = "POI - Spider Nest" + ambience = AMBIENCE_FOREBODING + +/area/submap/SyndiSniper + name = "POI - Syndi Sniper" + ambience = AMBIENCE_SIF + +/area/submap/WolfDen + name = "POI - Wolf Den" + ambience = AMBIENCE_SIF + +/area/submap/XenoHive + name = "POI - Xeno Hive" + ambience = AMBIENCE_RUINS + +/area/submap/CultBar + name = "POI - Cult Bar" + ambience = AMBIENCE_GHOSTLY + +/area/submap/MechHanger + name = "POI - Mech Hanger" + ambience = AMBIENCE_SIF + +/area/submap/DugOutMercs + name = "POI - Dug Out Mercanries" + ambience = AMBIENCE_HIGHSEC diff --git a/maps/tether/submaps/_tether_submaps.dm b/maps/tether/submaps/_tether_submaps.dm index ad7af628fc..26eb6dbae3 100644 --- a/maps/tether/submaps/_tether_submaps.dm +++ b/maps/tether/submaps/_tether_submaps.dm @@ -55,7 +55,7 @@ . = ..() seed_submaps(list(Z_LEVEL_UNDERDARK), 100, /area/mine/unexplored/underdark, /datum/map_template/underdark) new /datum/random_map/automata/cave_system/no_cracks(null, 3, 3, Z_LEVEL_UNDERDARK, world.maxx - 4, world.maxy - 4) // Create the mining Z-level. - new /datum/random_map/noise/ore(null, 1, 1, Z_LEVEL_UNDERDARK, 64, 64) // Create the mining ore distribution map. + new /datum/random_map/noise/ore/underdark(null, 1, 1, Z_LEVEL_UNDERDARK, 64, 64) // Create the mining ore distribution map. /datum/map_template/tether_lateload/tether_plains diff --git a/maps/tether/submaps/underdark_pois/underdark_things.dm b/maps/tether/submaps/underdark_pois/underdark_things.dm index 9a5ffc8fdb..926fb7393b 100644 --- a/maps/tether/submaps/underdark_pois/underdark_things.dm +++ b/maps/tether/submaps/underdark_pois/underdark_things.dm @@ -1,3 +1,8 @@ +/datum/random_map/noise/ore/underdark + descriptor = "Underdark ore distribution map" + deep_val = 0.7 + rare_val = 0.5 + // Weakened version of Phoron spiders /mob/living/simple_mob/animal/giant_spider/phorogenic/weak maxHealth = 100 diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index d624ce5e1a..8a3b5b1c3e 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -588,6 +588,7 @@ /obj/machinery/status_display{ pixel_x = -32 }, +/obj/item/weapon/gun/energy/mouseray/medical, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/storage) "aaT" = ( @@ -20372,7 +20373,25 @@ /obj/structure/bookcase{ name = "bookcase (Non-Fiction)" }, +<<<<<<< HEAD /obj/item/weapon/book/codex/lore/robutt, +======= +/obj/item/weapon/book/manual/hydroponics_pod_people, +/obj/item/weapon/book/manual/mass_spectrometry, +/obj/item/weapon/book/manual/materials_chemistry_analysis, +/obj/item/weapon/book/manual/medical_cloning, +/obj/item/weapon/book/manual/medical_diagnostics_manual, +/obj/item/weapon/book/manual/research_and_development, +/obj/item/weapon/book/manual/resleeving, +/obj/item/weapon/book/manual/ripley_build_and_repair, +/obj/item/weapon/book/manual/robotics_cyborgs, +/obj/item/weapon/book/manual/robotics_manual, +/obj/item/weapon/book/manual/rust_engine, +/obj/item/weapon/book/manual/security_space_law, +/obj/item/weapon/book/manual/standard_operating_procedure, +/obj/item/weapon/book/manual/stasis, +/obj/item/weapon/book/manual/supermatter_engine, +>>>>>>> 09a9819f20... Merge pull request #13295 from FirstSgtDan/Books /turf/simulated/floor/wood, /area/library) "aGx" = ( @@ -36890,6 +36909,7 @@ "bkS" = ( /obj/structure/table/standard, /obj/item/weapon/book/manual/robotics_cyborgs, +/obj/item/weapon/book/manual/robotics_manual, /obj/item/clothing/glasses/omnihud/rnd, /obj/machinery/light{ dir = 8 diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index fb27a3e852..39e39d30d9 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -36917,6 +36917,7 @@ /obj/effect/floor_decal/corner/green/border, /obj/machinery/light, /obj/machinery/portable_atmospherics/canister/oxygen, +/obj/item/weapon/storage/box/nifsofts_pilot, /turf/simulated/floor/tiled, /area/tether/exploration/pilot_office) "wEF" = ( diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm index cc5f227370..650ba57f8e 100644 --- a/maps/tether/tether_defines.dm +++ b/maps/tether/tether_defines.dm @@ -151,6 +151,13 @@ /area/tether/surfacebase/lowernortheva/external, //it outside /area/tether/surfacebase/security/gasstorage) //it maint + unit_test_z_levels = list( + Z_LEVEL_SURFACE_LOW, + Z_LEVEL_SURFACE_MID, + Z_LEVEL_SURFACE_HIGH, + Z_LEVEL_TRANSIT, + Z_LEVEL_SPACE_LOW + ) lateload_z_levels = list( list("Tether - Centcom","Tether - Misc","Tether - Underdark","Tether - Plains"), //Stock Tether lateload maps diff --git a/maps/tether/tether_jobs.dm b/maps/tether/tether_jobs.dm index d9024eecf9..7505bba142 100644 --- a/maps/tether/tether_jobs.dm +++ b/maps/tether/tether_jobs.dm @@ -25,7 +25,10 @@ selection_color = "#999999" economic_modifier = 7 minimal_player_age = 14 - pto_type = null + playtime_only = TRUE + pto_type = PTO_TALON + timeoff_factor = 1 + dept_time_required = 60 access = list(access_talon) minimal_access = list(access_talon) alt_titles = list("Talon Commander" = /datum/alt_title/talon_commander) @@ -49,7 +52,9 @@ selection_color = "#aaaaaa" economic_modifier = 5 minimal_player_age = 14 - pto_type = null + playtime_only = TRUE + pto_type = PTO_TALON + timeoff_factor = 1 access = list(access_talon) minimal_access = list(access_talon) alt_titles = list("Talon Medic" = /datum/alt_title/talon_medic) @@ -74,7 +79,9 @@ selection_color = "#aaaaaa" economic_modifier = 5 minimal_player_age = 14 - pto_type = null + playtime_only = TRUE + pto_type = PTO_TALON + timeoff_factor = 1 access = list(access_talon) minimal_access = list(access_talon) alt_titles = list("Talon Technician" = /datum/alt_title/talon_tech) @@ -99,7 +106,9 @@ selection_color = "#aaaaaa" economic_modifier = 5 minimal_player_age = 14 - pto_type = null + playtime_only = TRUE + pto_type = PTO_TALON + timeoff_factor = 1 access = list(access_talon) minimal_access = list(access_talon) alt_titles = list("Talon Helmsman" = /datum/alt_title/talon_helmsman) @@ -124,14 +133,19 @@ selection_color = "#aaaaaa" economic_modifier = 5 minimal_player_age = 14 - pto_type = null + playtime_only = TRUE + pto_type = PTO_TALON + timeoff_factor = 1 access = list(access_talon) minimal_access = list(access_talon) - alt_titles = list("Talon Security" = /datum/alt_title/talon_security) + alt_titles = list("Talon Security" = /datum/alt_title/talon_security, "Talon Marine" = /datum/alt_title/talon_marine) /datum/alt_title/talon_security title = "Talon Security" +/datum/alt_title/talon_marine + title = "Talon Marine" + /datum/job/talon_miner title = "Talon Miner" flag = TALMIN @@ -148,7 +162,9 @@ selection_color = "#aaaaaa" economic_modifier = 5 minimal_player_age = 14 - pto_type = null + playtime_only = TRUE + pto_type = PTO_TALON + timeoff_factor = 1 access = list(access_talon) minimal_access = list(access_talon) alt_titles = list("Talon Excavator" = /datum/alt_title/talon_excavator) diff --git a/maps/tether/tether_shuttles.dm b/maps/tether/tether_shuttles.dm index 27caa00596..ea8d600caa 100644 --- a/maps/tether/tether_shuttles.dm +++ b/maps/tether/tether_shuttles.dm @@ -101,18 +101,18 @@ #define MOVE_PER(x) move_time*(x/100) SECONDS - computer.visible_message("[bicon(computer)] Beginning flight and telemetry monitoring.") + computer.visible_message("\icon[computer][bicon(computer)] Beginning flight and telemetry monitoring.") sleep(MOVE_PER(5)) if(failures >= 1) - computer.visible_message("[bicon(computer)] Single engine failure, continuing flight.") + computer.visible_message("\icon[computer][bicon(computer)] Single engine failure, continuing flight.") sleep(MOVE_PER(10)) if(failures >= 2) - computer.visible_message("[bicon(computer)] Second engine failure, unable to complete flight.") + computer.visible_message("\icon[computer][bicon(computer)] Second engine failure, unable to complete flight.") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(10)) - computer.visible_message("[bicon(computer)] Commencing RTLS abort mode.") + computer.visible_message("\icon[computer][bicon(computer)] Commencing RTLS abort mode.") sleep(MOVE_PER(20)) if(failures < 3) move(area_transition,origin) @@ -120,18 +120,18 @@ return 1 if(failures >= 3) - computer.visible_message("[bicon(computer)] Total engine failure, unable to complete abort mode.") + computer.visible_message("\icon[computer][bicon(computer)] Total engine failure, unable to complete abort mode.") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) - computer.visible_message("[bicon(computer)] Distress signal broadcast.") + computer.visible_message("\icon[computer][bicon(computer)] Distress signal broadcast.") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) - computer.visible_message("[bicon(computer)] Stall. Stall. Stall. Stall.") + computer.visible_message("\icon[computer][bicon(computer)] Stall. Stall. Stall. Stall.") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) - computer.visible_message("[bicon(computer)] Terrain! Pull up! Terrain! Pull up!") + computer.visible_message("\icon[computer][bicon(computer)] Terrain! Pull up! Terrain! Pull up!") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) playsound(computer,'sound/misc/bloblarm.ogg',100,0) sleep(MOVE_PER(10)) diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm index e2f207924d..efb1376890 100644 --- a/maps/tether/tether_things.dm +++ b/maps/tether/tether_things.dm @@ -368,7 +368,7 @@ layer = ABOVE_WINDOW_LAYER /obj/machinery/vending/wallmed2 layer = ABOVE_WINDOW_LAYER -/obj/structure/closet/fireaxecabinet +/obj/structure/fireaxecabinet layer = ABOVE_WINDOW_LAYER /obj/structure/extinguisher_cabinet layer = ABOVE_WINDOW_LAYER diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index f63c0f24c1..135374fecb 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -135,6 +135,7 @@ var/list/all_maps = list() var/list/unit_test_exempt_areas = list() var/list/unit_test_exempt_from_atmos = list() var/list/unit_test_exempt_from_apc = list() + var/list/unit_test_exempt_from_wires = list() var/list/unit_test_z_levels //To test more than Z1, set your z-levels to test here. var/list/planet_datums_to_make = list() // Types of `/datum/planet`s that will be instantiated by SSPlanets. diff --git a/modular_chomp/code/datums/autolathe/arms.dm b/modular_chomp/code/datums/autolathe/arms.dm new file mode 100644 index 0000000000..15fc033da1 --- /dev/null +++ b/modular_chomp/code/datums/autolathe/arms.dm @@ -0,0 +1,18 @@ +/////// 5mm Caseless. +/datum/category_item/autolathe/arms/m5mmcaseless/ + name = "5mm Caseless magazine" + path =/obj/item/ammo_magazine/m5mmcaseless + hidden = 0 + resources = list(MAT_STEEL = 700, MAT_PHORON = 500) + +/datum/category_item/autolathe/arms/m5mmcaseless/empty + name = "5mm Caseless magazine(empty)" + path =/obj/item/ammo_magazine/m5mmcaseless/empty + hidden = 0 + resources = list(MAT_STEEL = 700) + +/datum/category_item/autolathe/arms/m5mmcaseless/stun + name = "5mm Caseless magazine(stun)" + path =/obj/item/ammo_magazine/m5mmcaseless/stun + hidden = 0 + resources = list(MAT_STEEL = 700, MAT_PHORON = 500) diff --git a/modular_chomp/code/datums/autolathe/engineering_ch.dm b/modular_chomp/code/datums/autolathe/engineering_ch.dm new file mode 100644 index 0000000000..16fa018a7e --- /dev/null +++ b/modular_chomp/code/datums/autolathe/engineering_ch.dm @@ -0,0 +1,20 @@ +// reverse 'escape plans' the autolathe here, 2017 grudge code be like +/datum/category_item/autolathe/engineering/capacitor + name = "capacitor" + path =/obj/item/weapon/stock_parts/capacitor + +/datum/category_item/autolathe/engineering/scanning_module + name = "scanning module" + path =/obj/item/weapon/stock_parts/scanning_module + +/datum/category_item/autolathe/engineering/manipulator + name = "micro-manipulator" + path =/obj/item/weapon/stock_parts/manipulator + +/datum/category_item/autolathe/engineering/micro_laser + name = "micro laser" + path =/obj/item/weapon/stock_parts/micro_laser + +/datum/category_item/autolathe/engineering/matter_bin + name = "matter bin" + path =/obj/item/weapon/stock_parts/matter_bin diff --git a/modular_chomp/code/datums/autolathe/general_ch.dm b/modular_chomp/code/datums/autolathe/general_ch.dm new file mode 100644 index 0000000000..e33f5d2f26 --- /dev/null +++ b/modular_chomp/code/datums/autolathe/general_ch.dm @@ -0,0 +1,3 @@ +/datum/category_item/autolathe/general/radio_subspace + name = "subspace radio" + path =/obj/item/device/radio/subspace \ No newline at end of file diff --git a/modular_chomp/code/game/machinery/airconditioner_ch.dm b/modular_chomp/code/game/machinery/airconditioner_ch.dm new file mode 100644 index 0000000000..947c9eef60 --- /dev/null +++ b/modular_chomp/code/game/machinery/airconditioner_ch.dm @@ -0,0 +1,74 @@ +#define MODE_IDLE 0 +#define MODE_HEATING 1 +#define MODE_COOLING 2 +/obj/machinery/power/thermoregulator/southerncross + name = "Custom Thermal Regulator" + desc = "A massive custom made Thermal regulator or CTR for short, intended to keep heat loss when going in our outside to a minimum." + icon = 'icons/obj/machines/wallthermal.dmi' + icon_state = "lasergen" + density = 0 + anchored = 1 + //Consider making this powered by the room at some point. + use_power = 0 //is powered directly from cables + active_power_usage = 250 // VERY low power use + idle_power_usage = 250 + + circuit = null + /* + null so people can not deconstruct them and remake them to normal Regulators, + probably should just make a circuit for it but this is pretty much just a proof of concept at the moment. + */ + +/obj/machinery/power/thermoregulator/southerncross/process() + if(!on) + return + if(!powernet) + turn_off() + return + + /* DON'T CARE, DIDN'T ASK. YOU WILL PERFORM THE MACGUFFIN HEAT EXCHANGE AND NOT POWER DOWN UNTIL YOU ARE TOLD TO! + if(draw_power(idle_power_usage) < idle_power_usage) + visible_message("\The [src] shuts down.") + turn_off() + return + */ + + var/datum/gas_mixture/env = loc.return_air() + if(!env || abs(env.temperature - target_temp) < 1) + change_mode(MODE_IDLE) + return + + var/datum/gas_mixture/removed = env.remove_ratio(0.99) + if(!removed) + change_mode(MODE_IDLE) + return + + var/heat_transfer = removed.get_thermal_energy_change(target_temp) + // var/power_avail + if(heat_transfer == 0) //just in case + change_mode(MODE_IDLE) + else if(heat_transfer > 0) + change_mode(MODE_HEATING) + // power_avail = draw_power(min(heat_transfer, active_power_usage)) + removed.add_thermal_energy(min(active_power_usage*1000,heat_transfer)) + else + change_mode(MODE_COOLING) + heat_transfer = abs(heat_transfer) + var/cop = removed.temperature/TN60C + var/actual_heat_transfer = heat_transfer + heat_transfer = min(heat_transfer, active_power_usage*cop) + // power_avail = draw_power(heat_transfer/cop) + removed.add_thermal_energy(-min(active_power_usage*1000*cop,actual_heat_transfer)) + env.merge(removed) + +// Given the power behind this thermodynamics defying machine, nerfing EMP effectiveness. +/obj/machinery/power/thermoregulator/southerncross/emp_act(severity) + if(!on) + on = 1 + target_temp += rand(0, 20) + update_icon() + ..(severity) + +#undef MODE_IDLE +#undef MODE_HEATING +#undef MODE_COOLING \ No newline at end of file diff --git a/modular_chomp/code/modules/client/preference_setup/global/setting_datums.dm b/modular_chomp/code/modules/client/preference_setup/global/setting_datums.dm index 9d3d3b34bb..416ac2ea70 100644 --- a/modular_chomp/code/modules/client/preference_setup/global/setting_datums.dm +++ b/modular_chomp/code/modules/client/preference_setup/global/setting_datums.dm @@ -2,4 +2,10 @@ description ="Random emote pitch" key = "EMOTE_VARY" enabled_description = "Will be Random" - disabled_description = "Will not be Random" \ No newline at end of file + disabled_description = "Will not be Random" + +/datum/client_preference/autotranscore + description = "Automatic Transcore Notification" + key = "AUTOTRANSCORE" + enabled_description = "Automatic notification" + disabled_description = "No automatic notification" diff --git a/modular_chomp/code/modules/client/preferences.dm b/modular_chomp/code/modules/client/preferences.dm index dca804f0d8..887baa7bbe 100644 --- a/modular_chomp/code/modules/client/preferences.dm +++ b/modular_chomp/code/modules/client/preferences.dm @@ -12,3 +12,18 @@ SScharacter_setup.queue_preferences_save(prefs) feedback_add_details("admin_verb","TRandomEmotePitch") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_autotranscore() + set name = "Toggle Automatic Transcore Notification" + set category = "Preferences" + set desc = "Toggles whether or not your death with a backup implant will automatically trigger a transcore notification after a few minutes." + + var/pref_path = /datum/client_preference/autotranscore + + toggle_preference(pref_path) + + to_chat(src, "Your death with a backup implant will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] trigger an automatic transcore notification.") + + SScharacter_setup.queue_preferences_save(prefs) + + feedback_add_details("admin_verb","TAutoTranscore") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/modular_chomp/code/modules/emotes/definitions/audiable.dm b/modular_chomp/code/modules/emotes/definitions/audiable.dm index 27b18163c7..71b57b06c0 100644 --- a/modular_chomp/code/modules/emotes/definitions/audiable.dm +++ b/modular_chomp/code/modules/emotes/definitions/audiable.dm @@ -1,3 +1,10 @@ /decl/emote/audible/wheeze emote_sound = 'modular_chomp/sound/voice/wheeze.ogg' +/decl/emote/audible/prbt2 + key = "prbt2" + emote_message_1p = "You prbt." + emote_message_3p = "prbts." + emote_message_1p_target = "You prbt at TARGET." + emote_message_3p_target = "prbts at TARGET." + emote_sound = 'sound/voice/prbt2.ogg' \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/carbon/human/human.dm b/modular_chomp/code/modules/mob/living/carbon/human/human.dm new file mode 100644 index 0000000000..cfad50726f --- /dev/null +++ b/modular_chomp/code/modules/mob/living/carbon/human/human.dm @@ -0,0 +1,18 @@ +/mob/living/carbon/human/update_fullness() + var/previous_stomach_fullness = vore_fullness_ex["stomach"] + var/previous_taur_fullness = vore_fullness_ex["taur belly"] + //update_vore_tail_sprite() + //update_vore_belly_sprite() + . = ..() + if(vore_fullness_ex["stomach"] != previous_stomach_fullness) + update_vore_belly_sprite() + if(vore_fullness_ex["taur belly"] != previous_taur_fullness) + update_vore_tail_sprite() + +/mob/living/carbon/human/vs_animate(var/belly_to_animate) + if(belly_to_animate == "stomach") + vore_belly_animation() + else if(belly_to_animate == "taur belly") + vore_tail_animation() + else + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defines_ch.dm b/modular_chomp/code/modules/mob/living/carbon/human/human_defines.dm similarity index 54% rename from code/modules/mob/living/carbon/human/human_defines_ch.dm rename to modular_chomp/code/modules/mob/living/carbon/human/human_defines.dm index 538be62465..11eae0dc7b 100644 --- a/code/modules/mob/living/carbon/human/human_defines_ch.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/human_defines.dm @@ -3,3 +3,9 @@ var/loneliness_stage = 0 var/next_loneliness_time = 0 var/digitigrade = 0 // 0 = no digi, 1 = default, 2+ = digi styles... (Not used yet) + vore_capacity = 3 + vore_capacity_ex = list("stomach" = 3, "taur belly" = 3) + vore_fullness_ex = list("stomach" = 0, "taur belly" = 0) + vore_icon_bellies = list("stomach", "taur belly") + var/struggle_anim_stomach = FALSE + var/struggle_anim_taur = FALSE diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/species.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/species.dm index a6f78ed6fe..fa28790f9d 100644 --- a/modular_chomp/code/modules/mob/living/carbon/human/species/species.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/species.dm @@ -1,2 +1,3 @@ /datum/species - var/crit_mod = 1 \ No newline at end of file + var/crit_mod = 1 + var/vore_belly_default_variant = "H" \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm index 7317d2fbf4..bb155fa215 100644 --- a/modular_chomp/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/station/protean/protean_blob.dm @@ -143,7 +143,7 @@ if(!riding_datum) riding_datum = new /datum/riding/simple_mob/protean_blob(src) -datum/riding/simple_mob/protean_blob/handle_vehicle_layer() +/datum/riding/simple_mob/protean_blob/handle_vehicle_layer() ridden.layer = OBJ_LAYER /mob/living/simple_mob/protean_blob/MouseDrop_T() diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/station/station.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/station/station.dm new file mode 100644 index 0000000000..9ae8e26d1f --- /dev/null +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/station/station.dm @@ -0,0 +1,2 @@ +/datum/species/unathi + vore_belly_default_variant = "L" \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/carbon/human/species/station/teshari.dm b/modular_chomp/code/modules/mob/living/carbon/human/species/station/teshari.dm new file mode 100644 index 0000000000..b47fbf79f5 --- /dev/null +++ b/modular_chomp/code/modules/mob/living/carbon/human/species/station/teshari.dm @@ -0,0 +1,2 @@ +/datum/species/teshari + vore_belly_default_variant = "T" \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/carbon/human/update_icons.dm b/modular_chomp/code/modules/mob/living/carbon/human/update_icons.dm new file mode 100644 index 0000000000..15401de957 --- /dev/null +++ b/modular_chomp/code/modules/mob/living/carbon/human/update_icons.dm @@ -0,0 +1,104 @@ +// Expand shoe layer to allow changing the icon for digi legs +// For some reason, suit and uniform already has this funcitonality, but shoes do not. + +#define SHOES_LAYER_ALT 8 //Shoe-slot item (when set to be under uniform via verb) +#define SHOES_LAYER 11 //Shoe-slot item +#define VORE_BELLY_LAYER 31 //Should be the same that it is in update_icons.dm + +/mob/living/carbon/human/update_inv_shoes() + //. = ..() + remove_layer(SHOES_LAYER) + remove_layer(SHOES_LAYER_ALT) //Dumb alternate layer for shoes being under the uniform. + + if(!shoes || (wear_suit && wear_suit.flags_inv & HIDESHOES) || (w_uniform && w_uniform.flags_inv & HIDESHOES)) + return //Either nothing to draw, or it'd be hidden. + + for(var/f in list(BP_L_FOOT, BP_R_FOOT)) + var/obj/item/organ/external/foot/foot = get_organ(f) + if(istype(foot) && foot.is_hidden_by_tail()) //If either foot is hidden by the tail, don't render footwear. + return + + var/obj/item/clothing/shoes/shoe = shoes + var/shoe_sprite + + if(istype(shoe) && !isnull(shoe.update_icon_define)) + shoe_sprite = shoe.update_icon_define + else + shoe_sprite = INV_FEET_DEF_ICON + + //Allow for shoe layer toggle nonsense + var/shoe_layer = SHOES_LAYER + if(istype(shoes, /obj/item/clothing/shoes)) + var/obj/item/clothing/shoes/ushoes = shoes + if(ushoes.shoes_under_pants == 1) + shoe_layer = SHOES_LAYER_ALT + + //NB: the use of a var for the layer on this one + overlays_standing[shoe_layer] = shoes.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_shoes_str, default_icon = shoe_sprite, default_layer = shoe_layer) + + apply_layer(SHOES_LAYER) + apply_layer(SHOES_LAYER_ALT) + +/mob/living/carbon/human/proc/update_vore_belly_sprite() + if(QDESTROYING(src)) + return + + remove_layer(VORE_BELLY_LAYER) + + var/image/vore_belly_image = get_vore_belly_image() + if(vore_belly_image) + vore_belly_image.layer = BODY_LAYER+VORE_BELLY_LAYER + overlays_standing[VORE_BELLY_LAYER] = vore_belly_image + + apply_layer(VORE_BELLY_LAYER) + +/mob/living/carbon/human/proc/get_vore_belly_image() + if(!(wear_suit && wear_suit.flags_inv & HIDETAIL)) + var/vs_fullness = vore_fullness_ex["stomach"] + var/icon/vorebelly_s = new/icon(icon = 'icons/mob/vore/Bellies.dmi', icon_state = "[species.vore_belly_default_variant]Belly[vs_fullness][struggle_anim_stomach ? "" : " idle"]") + vorebelly_s.Blend(rgb(r_skin, g_skin, b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) + var/image/working = image(vorebelly_s) + working.overlays += em_block_image_generic(working) + return working + return null + +/mob/living/carbon/human/proc/vore_belly_animation() + if(!struggle_anim_stomach) + struggle_anim_stomach = TRUE + update_vore_belly_sprite() + spawn(12) + struggle_anim_stomach = FALSE + update_vore_belly_sprite() + +/mob/living/carbon/human/proc/update_vore_tail_sprite() + if(QDESTROYING(src)) + return + + remove_layer(VORE_TAIL_LAYER) + + var/image/vore_tail_image = get_vore_tail_image() + if(vore_tail_image) + vore_tail_image.layer = BODY_LAYER+VORE_TAIL_LAYER + overlays_standing[VORE_TAIL_LAYER] = vore_tail_image + + apply_layer(VORE_TAIL_LAYER) + +/mob/living/carbon/human/proc/get_vore_tail_image() + if(tail_style && istaurtail(tail_style) && tail_style:vore_tail_sprite_variant) + var/vs_fullness = vore_fullness_ex["taur belly"] + var/icon/vorebelly_s = new/icon(icon = 'icons/mob/vore/Taur_Bellies.dmi', icon_state = "Taur[tail_style:vore_tail_sprite_variant]-Belly-[vs_fullness][struggle_anim_taur ? "" : " idle"]") + vorebelly_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode) + var/image/working = image(vorebelly_s) + working.pixel_x = -16 + if(tail_style.em_block) + working.overlays += em_block_image_generic(working) + return working + return null + +/mob/living/carbon/human/proc/vore_tail_animation() + if(!struggle_anim_taur) + struggle_anim_taur = TRUE + update_vore_tail_sprite() + spawn(12) + struggle_anim_taur = FALSE + update_vore_tail_sprite() diff --git a/modular_chomp/code/modules/mob/living/emote.dm b/modular_chomp/code/modules/mob/living/emote.dm index c5f36f01c8..4a2c95f9a8 100644 --- a/modular_chomp/code/modules/mob/living/emote.dm +++ b/modular_chomp/code/modules/mob/living/emote.dm @@ -1,4 +1,4 @@ -world/New() +/world/New() . = ..() //add stuff to default emote vars specifically for chomp. @@ -6,4 +6,4 @@ world/New() _human_default_emotes += /decl/emote/audible/wheeze //simple_mob default emotes - _simple_mob_default_emotes += /decl/emote/audible/wheeze \ No newline at end of file + _simple_mob_default_emotes += /decl/emote/audible/wheeze diff --git a/modular_chomp/code/modules/mob/living/living.dm b/modular_chomp/code/modules/mob/living/living.dm new file mode 100644 index 0000000000..d9b851cb33 --- /dev/null +++ b/modular_chomp/code/modules/mob/living/living.dm @@ -0,0 +1,2 @@ +/mob/living/proc/vs_animate(var/belly_to_animate) + return \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/living/simple_mob/donteatbossmonsters.dm b/modular_chomp/code/modules/mob/living/simple_mob/donteatbossmonsters.dm new file mode 100644 index 0000000000..f8a0cdfd6a --- /dev/null +++ b/modular_chomp/code/modules/mob/living/simple_mob/donteatbossmonsters.dm @@ -0,0 +1,45 @@ +//I've come to nerf vore in the vorecode, and only the headmins and maintainers can stop me. + +/mob/living/simple_mob/mobs_monsters/clowns + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/vore/aggressive/dragon + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/vore/aggressive/chungus + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/vore/greatwolf + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/vore/leopardmander + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/vore/solarmoth + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/construct + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/mechanical/mecha + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/mechanical/hivebot/tank + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/space/alien/queen + digestable = 0 + devourable = 0 + +/mob/living/simple_mob/animal/giant_spider/broodmother + digestable = 0 + devourable = 0 diff --git a/modular_chomp/code/modules/mob/living/simple_mob/simple_mob.dm b/modular_chomp/code/modules/mob/living/simple_mob/simple_mob.dm index 75bbf9ab2a..749d8b9f7c 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/simple_mob.dm @@ -15,7 +15,7 @@ Spit(A) . = ..() -mob/living/simple_mob/verb/toggle_vore_icons() +/mob/living/simple_mob/verb/toggle_vore_icons() set name = "Toggle Vore Sprite" set desc = "Toggle visibility of changed mob sprite when you have eaten other things." @@ -34,7 +34,7 @@ mob/living/simple_mob/verb/toggle_vore_icons() update_icon() -mob/living/simple_mob/handle_speech_sound() +/mob/living/simple_mob/handle_speech_sound() if(speech_sounds && speech_sounds.len && prob(speech_chance)) var/list/returns[2] returns[1] = sound(pick(speech_sounds)) diff --git a/modular_chomp/code/modules/mob/mob.dm b/modular_chomp/code/modules/mob/mob.dm new file mode 100644 index 0000000000..ba287eada4 --- /dev/null +++ b/modular_chomp/code/modules/mob/mob.dm @@ -0,0 +1,3 @@ +/mob + var/voice_freq = 42500 // Preference for character voice frequency + var/list/voice_sounds_list = list() // The sound list containing our voice sounds! \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/new_player/sprite_accessories_taur.dm b/modular_chomp/code/modules/mob/new_player/sprite_accessories_taur.dm new file mode 100644 index 0000000000..6ec0f1c341 --- /dev/null +++ b/modular_chomp/code/modules/mob/new_player/sprite_accessories_taur.dm @@ -0,0 +1,6 @@ +/datum/sprite_accessory/tail/taur + var/vore_tail_sprite_variant = "" + + +/datum/sprite_accessory/tail/taur/wolf + vore_tail_sprite_variant = "N" diff --git a/code/modules/research/designs/weapons_ch.dm b/modular_chomp/code/modules/research/designs/weapons.dm similarity index 81% rename from code/modules/research/designs/weapons_ch.dm rename to modular_chomp/code/modules/research/designs/weapons.dm index d035cbadc5..58a7d23be6 100644 --- a/code/modules/research/designs/weapons_ch.dm +++ b/modular_chomp/code/modules/research/designs/weapons.dm @@ -34,4 +34,11 @@ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 4, TECH_POWER = 4) materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 2000, "silver" = 1000, "diamond" = 750) build_path = /obj/item/weapon/gun/energy/locked/phasegun/cannon - sort_string = "MACAD" \ No newline at end of file + sort_string = "MACAD" +//Leathals And any new CHOMP weapons. +/datum/design/item/weapon/gun/projectile/caseless/prototype + id = "caselessrifle" + req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_PHORON = 5) + materials = list(DEFAULT_WALL_MATERIAL = 7000, "titanium" = 4000) + build_path = /obj/item/weapon/gun/projectile/caseless/prototype + sort_string = "MACAE" diff --git a/modular_chomp/code/modules/vore/resizing/resize.dm b/modular_chomp/code/modules/vore/resizing/resize.dm new file mode 100644 index 0000000000..47abdc30b3 --- /dev/null +++ b/modular_chomp/code/modules/vore/resizing/resize.dm @@ -0,0 +1,14 @@ +/mob/living/Crossed(var/atom/movable/AM) + ..() + var/mob/living/target = AM + if(istype(target) && src.lying && target.loc && target.buckled != src) + // src.lying being true means that in theory this code shouldn't run at the same time as the existing code for this in Bump. Probably. + // And optionally, this could be gated behind another preference, to prevent stunlock being abused. + if((mob_always_swap || (a_intent == I_HELP || src.restrained()) && (target.a_intent == I_HELP || target.restrained())) && target.canmove && target.handle_micro_bump_helping(src)) + return + else if(!(target.a_intent == I_HELP || target.restrained()) && target.handle_micro_bump_other(src)) + if(src.step_mechanics_pref && target.step_mechanics_pref) + target.handle_micro_bump_other(src) + else + target.handle_micro_bump_other(src, 1) + return diff --git a/modular_chomp/icons/mob/catborg/catborg.dmi b/modular_chomp/icons/mob/catborg/catborg.dmi new file mode 100644 index 0000000000..4784ff1bf1 Binary files /dev/null and b/modular_chomp/icons/mob/catborg/catborg.dmi differ diff --git a/sound/effects/pai-restore.ogg b/sound/effects/pai-restore.ogg new file mode 100644 index 0000000000..858b519a10 Binary files /dev/null and b/sound/effects/pai-restore.ogg differ diff --git a/sound/effects/pai_login.ogg b/sound/effects/pai_login.ogg new file mode 100644 index 0000000000..b3aa132905 Binary files /dev/null and b/sound/effects/pai_login.ogg differ diff --git a/sound/talksounds/a.ogg b/sound/talksounds/a.ogg new file mode 100644 index 0000000000..5c9920eaff Binary files /dev/null and b/sound/talksounds/a.ogg differ diff --git a/sound/talksounds/b.ogg b/sound/talksounds/b.ogg new file mode 100644 index 0000000000..294af704dc Binary files /dev/null and b/sound/talksounds/b.ogg differ diff --git a/sound/talksounds/c.ogg b/sound/talksounds/c.ogg new file mode 100644 index 0000000000..54d1dce5b4 Binary files /dev/null and b/sound/talksounds/c.ogg differ diff --git a/sound/talksounds/d.ogg b/sound/talksounds/d.ogg new file mode 100644 index 0000000000..e82bd21a8b Binary files /dev/null and b/sound/talksounds/d.ogg differ diff --git a/sound/talksounds/e.ogg b/sound/talksounds/e.ogg new file mode 100644 index 0000000000..2637136bbb Binary files /dev/null and b/sound/talksounds/e.ogg differ diff --git a/sound/talksounds/f.ogg b/sound/talksounds/f.ogg new file mode 100644 index 0000000000..2a30912e27 Binary files /dev/null and b/sound/talksounds/f.ogg differ diff --git a/sound/talksounds/g.ogg b/sound/talksounds/g.ogg new file mode 100644 index 0000000000..5f61e4b39d Binary files /dev/null and b/sound/talksounds/g.ogg differ diff --git a/sound/talksounds/goon/blub.ogg b/sound/talksounds/goon/blub.ogg new file mode 100644 index 0000000000..ee6de6ede4 Binary files /dev/null and b/sound/talksounds/goon/blub.ogg differ diff --git a/sound/talksounds/goon/blub_ask.ogg b/sound/talksounds/goon/blub_ask.ogg new file mode 100644 index 0000000000..193c3952b0 Binary files /dev/null and b/sound/talksounds/goon/blub_ask.ogg differ diff --git a/sound/talksounds/goon/blub_exclaim.ogg b/sound/talksounds/goon/blub_exclaim.ogg new file mode 100644 index 0000000000..b879fbd464 Binary files /dev/null and b/sound/talksounds/goon/blub_exclaim.ogg differ diff --git a/sound/talksounds/goon/bottalk_1.ogg b/sound/talksounds/goon/bottalk_1.ogg new file mode 100644 index 0000000000..b727224998 Binary files /dev/null and b/sound/talksounds/goon/bottalk_1.ogg differ diff --git a/sound/talksounds/goon/bottalk_2.ogg b/sound/talksounds/goon/bottalk_2.ogg new file mode 100644 index 0000000000..745b1a4edc Binary files /dev/null and b/sound/talksounds/goon/bottalk_2.ogg differ diff --git a/sound/talksounds/goon/bottalk_3.ogg b/sound/talksounds/goon/bottalk_3.ogg new file mode 100644 index 0000000000..e91f6bc156 Binary files /dev/null and b/sound/talksounds/goon/bottalk_3.ogg differ diff --git a/sound/talksounds/goon/bottalk_4.wav b/sound/talksounds/goon/bottalk_4.wav new file mode 100644 index 0000000000..130dfc3a8e Binary files /dev/null and b/sound/talksounds/goon/bottalk_4.wav differ diff --git a/sound/talksounds/goon/buwoo.ogg b/sound/talksounds/goon/buwoo.ogg new file mode 100644 index 0000000000..45bcbd50c6 Binary files /dev/null and b/sound/talksounds/goon/buwoo.ogg differ diff --git a/sound/talksounds/goon/buwoo_ask.ogg b/sound/talksounds/goon/buwoo_ask.ogg new file mode 100644 index 0000000000..d7011219b5 Binary files /dev/null and b/sound/talksounds/goon/buwoo_ask.ogg differ diff --git a/sound/talksounds/goon/buwoo_exclaim.ogg b/sound/talksounds/goon/buwoo_exclaim.ogg new file mode 100644 index 0000000000..935a802862 Binary files /dev/null and b/sound/talksounds/goon/buwoo_exclaim.ogg differ diff --git a/sound/talksounds/goon/cow.ogg b/sound/talksounds/goon/cow.ogg new file mode 100644 index 0000000000..db6c0a63ca Binary files /dev/null and b/sound/talksounds/goon/cow.ogg differ diff --git a/sound/talksounds/goon/cow_ask.ogg b/sound/talksounds/goon/cow_ask.ogg new file mode 100644 index 0000000000..aabd6f75c1 Binary files /dev/null and b/sound/talksounds/goon/cow_ask.ogg differ diff --git a/sound/talksounds/goon/cow_exclaim.ogg b/sound/talksounds/goon/cow_exclaim.ogg new file mode 100644 index 0000000000..dfac225463 Binary files /dev/null and b/sound/talksounds/goon/cow_exclaim.ogg differ diff --git a/sound/talksounds/goon/lizard.ogg b/sound/talksounds/goon/lizard.ogg new file mode 100644 index 0000000000..48638b0f23 Binary files /dev/null and b/sound/talksounds/goon/lizard.ogg differ diff --git a/sound/talksounds/goon/lizard_ask.ogg b/sound/talksounds/goon/lizard_ask.ogg new file mode 100644 index 0000000000..60cf84ff09 Binary files /dev/null and b/sound/talksounds/goon/lizard_ask.ogg differ diff --git a/sound/talksounds/goon/lizard_exclaim.ogg b/sound/talksounds/goon/lizard_exclaim.ogg new file mode 100644 index 0000000000..20d3c0b768 Binary files /dev/null and b/sound/talksounds/goon/lizard_exclaim.ogg differ diff --git a/sound/talksounds/goon/pug.ogg b/sound/talksounds/goon/pug.ogg new file mode 100644 index 0000000000..86d50225a5 Binary files /dev/null and b/sound/talksounds/goon/pug.ogg differ diff --git a/sound/talksounds/goon/pug_ask.ogg b/sound/talksounds/goon/pug_ask.ogg new file mode 100644 index 0000000000..4cdf1c8a5e Binary files /dev/null and b/sound/talksounds/goon/pug_ask.ogg differ diff --git a/sound/talksounds/goon/pug_exclaim.ogg b/sound/talksounds/goon/pug_exclaim.ogg new file mode 100644 index 0000000000..ed47bcf1c6 Binary files /dev/null and b/sound/talksounds/goon/pug_exclaim.ogg differ diff --git a/sound/talksounds/goon/pugg.ogg b/sound/talksounds/goon/pugg.ogg new file mode 100644 index 0000000000..90fa070e8b Binary files /dev/null and b/sound/talksounds/goon/pugg.ogg differ diff --git a/sound/talksounds/goon/pugg_ask.ogg b/sound/talksounds/goon/pugg_ask.ogg new file mode 100644 index 0000000000..463aa0afa0 Binary files /dev/null and b/sound/talksounds/goon/pugg_ask.ogg differ diff --git a/sound/talksounds/goon/pugg_exclaim.ogg b/sound/talksounds/goon/pugg_exclaim.ogg new file mode 100644 index 0000000000..c8d4ae1b4f Binary files /dev/null and b/sound/talksounds/goon/pugg_exclaim.ogg differ diff --git a/sound/talksounds/goon/radio.ogg b/sound/talksounds/goon/radio.ogg new file mode 100644 index 0000000000..0dcb87214f Binary files /dev/null and b/sound/talksounds/goon/radio.ogg differ diff --git a/sound/talksounds/goon/radio2.ogg b/sound/talksounds/goon/radio2.ogg new file mode 100644 index 0000000000..a9364857a5 Binary files /dev/null and b/sound/talksounds/goon/radio2.ogg differ diff --git a/sound/talksounds/goon/radio_ai.ogg b/sound/talksounds/goon/radio_ai.ogg new file mode 100644 index 0000000000..97eaf17417 Binary files /dev/null and b/sound/talksounds/goon/radio_ai.ogg differ diff --git a/sound/talksounds/goon/roach.ogg b/sound/talksounds/goon/roach.ogg new file mode 100644 index 0000000000..55a2ad8ac7 Binary files /dev/null and b/sound/talksounds/goon/roach.ogg differ diff --git a/sound/talksounds/goon/roach_ask.ogg b/sound/talksounds/goon/roach_ask.ogg new file mode 100644 index 0000000000..dc15d884cd Binary files /dev/null and b/sound/talksounds/goon/roach_ask.ogg differ diff --git a/sound/talksounds/goon/roach_exclaim.ogg b/sound/talksounds/goon/roach_exclaim.ogg new file mode 100644 index 0000000000..3a5a17d47a Binary files /dev/null and b/sound/talksounds/goon/roach_exclaim.ogg differ diff --git a/sound/talksounds/goon/skelly.ogg b/sound/talksounds/goon/skelly.ogg new file mode 100644 index 0000000000..b8e1a2921a Binary files /dev/null and b/sound/talksounds/goon/skelly.ogg differ diff --git a/sound/talksounds/goon/skelly_ask.ogg b/sound/talksounds/goon/skelly_ask.ogg new file mode 100644 index 0000000000..e81552d8df Binary files /dev/null and b/sound/talksounds/goon/skelly_ask.ogg differ diff --git a/sound/talksounds/goon/skelly_exclaim.ogg b/sound/talksounds/goon/skelly_exclaim.ogg new file mode 100644 index 0000000000..79eb112d1a Binary files /dev/null and b/sound/talksounds/goon/skelly_exclaim.ogg differ diff --git a/sound/talksounds/goon/speak_1.ogg b/sound/talksounds/goon/speak_1.ogg new file mode 100644 index 0000000000..ab8ddde4a6 Binary files /dev/null and b/sound/talksounds/goon/speak_1.ogg differ diff --git a/sound/talksounds/goon/speak_1_ask.ogg b/sound/talksounds/goon/speak_1_ask.ogg new file mode 100644 index 0000000000..89d631c6f6 Binary files /dev/null and b/sound/talksounds/goon/speak_1_ask.ogg differ diff --git a/sound/talksounds/goon/speak_1_exclaim.ogg b/sound/talksounds/goon/speak_1_exclaim.ogg new file mode 100644 index 0000000000..3be20fef39 Binary files /dev/null and b/sound/talksounds/goon/speak_1_exclaim.ogg differ diff --git a/sound/talksounds/goon/speak_2.ogg b/sound/talksounds/goon/speak_2.ogg new file mode 100644 index 0000000000..a8c9444a52 Binary files /dev/null and b/sound/talksounds/goon/speak_2.ogg differ diff --git a/sound/talksounds/goon/speak_2_ask.ogg b/sound/talksounds/goon/speak_2_ask.ogg new file mode 100644 index 0000000000..a2c9c86385 Binary files /dev/null and b/sound/talksounds/goon/speak_2_ask.ogg differ diff --git a/sound/talksounds/goon/speak_2_exclaim.ogg b/sound/talksounds/goon/speak_2_exclaim.ogg new file mode 100644 index 0000000000..7e0838d721 Binary files /dev/null and b/sound/talksounds/goon/speak_2_exclaim.ogg differ diff --git a/sound/talksounds/goon/speak_3.ogg b/sound/talksounds/goon/speak_3.ogg new file mode 100644 index 0000000000..33ec079b84 Binary files /dev/null and b/sound/talksounds/goon/speak_3.ogg differ diff --git a/sound/talksounds/goon/speak_3_ask.ogg b/sound/talksounds/goon/speak_3_ask.ogg new file mode 100644 index 0000000000..13156c332e Binary files /dev/null and b/sound/talksounds/goon/speak_3_ask.ogg differ diff --git a/sound/talksounds/goon/speak_3_exclaim.ogg b/sound/talksounds/goon/speak_3_exclaim.ogg new file mode 100644 index 0000000000..e10eb615b0 Binary files /dev/null and b/sound/talksounds/goon/speak_3_exclaim.ogg differ diff --git a/sound/talksounds/goon/speak_4.ogg b/sound/talksounds/goon/speak_4.ogg new file mode 100644 index 0000000000..6de26114ae Binary files /dev/null and b/sound/talksounds/goon/speak_4.ogg differ diff --git a/sound/talksounds/goon/speak_4_ask.ogg b/sound/talksounds/goon/speak_4_ask.ogg new file mode 100644 index 0000000000..76421d8fdd Binary files /dev/null and b/sound/talksounds/goon/speak_4_ask.ogg differ diff --git a/sound/talksounds/goon/speak_4_exclaim.ogg b/sound/talksounds/goon/speak_4_exclaim.ogg new file mode 100644 index 0000000000..ae6f3985be Binary files /dev/null and b/sound/talksounds/goon/speak_4_exclaim.ogg differ diff --git a/sound/talksounds/h.ogg b/sound/talksounds/h.ogg new file mode 100644 index 0000000000..9ed1f01341 Binary files /dev/null and b/sound/talksounds/h.ogg differ diff --git a/sound/talksounds/me_a.ogg b/sound/talksounds/me_a.ogg new file mode 100644 index 0000000000..8cb55c54f5 Binary files /dev/null and b/sound/talksounds/me_a.ogg differ diff --git a/sound/talksounds/me_b.ogg b/sound/talksounds/me_b.ogg new file mode 100644 index 0000000000..48e6b61d59 Binary files /dev/null and b/sound/talksounds/me_b.ogg differ diff --git a/sound/talksounds/me_c.ogg b/sound/talksounds/me_c.ogg new file mode 100644 index 0000000000..65476ee720 Binary files /dev/null and b/sound/talksounds/me_c.ogg differ diff --git a/sound/talksounds/me_d.ogg b/sound/talksounds/me_d.ogg new file mode 100644 index 0000000000..45d44bf2a1 Binary files /dev/null and b/sound/talksounds/me_d.ogg differ diff --git a/sound/talksounds/me_e.ogg b/sound/talksounds/me_e.ogg new file mode 100644 index 0000000000..d56c27d97d Binary files /dev/null and b/sound/talksounds/me_e.ogg differ diff --git a/sound/talksounds/me_f.ogg b/sound/talksounds/me_f.ogg new file mode 100644 index 0000000000..25e9754fec Binary files /dev/null and b/sound/talksounds/me_f.ogg differ diff --git a/sound/talksounds/subtle_sound.ogg b/sound/talksounds/subtle_sound.ogg new file mode 100644 index 0000000000..b8986f13fc Binary files /dev/null and b/sound/talksounds/subtle_sound.ogg differ diff --git a/sound/voice/moth/moth_chitter.ogg b/sound/voice/moth/moth_chitter.ogg new file mode 100644 index 0000000000..842bcf8e53 Binary files /dev/null and b/sound/voice/moth/moth_chitter.ogg differ diff --git a/sound/voice/moth/moth_laugh.ogg b/sound/voice/moth/moth_laugh.ogg new file mode 100644 index 0000000000..391d6c5aef Binary files /dev/null and b/sound/voice/moth/moth_laugh.ogg differ diff --git a/sound/voice/prbt2.ogg b/sound/voice/prbt2.ogg new file mode 100644 index 0000000000..016c77ef38 Binary files /dev/null and b/sound/voice/prbt2.ogg differ diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml index 7290ff0a13..843f019caa 100644 --- a/tgui/.eslintrc.yml +++ b/tgui/.eslintrc.yml @@ -1,4 +1,5 @@ root: true +extends: prettier parser: '@typescript-eslint/parser' parserOptions: ecmaVersion: 2020 @@ -349,15 +350,15 @@ rules: ## Enforce the location of arrow function bodies # implicit-arrow-linebreak: error ## Enforce consistent indentation - indent: [error, 2, { SwitchCase: 1 }] + # indent: [warn, 2, { SwitchCase: 1 }] ## Enforce the consistent use of either double or single quotes in JSX ## attributes - jsx-quotes: [error, prefer-double] + # jsx-quotes: [warn, prefer-double] ## Enforce consistent spacing between keys and values in object literal ## properties - key-spacing: [error, { beforeColon: false, afterColon: true }] + # key-spacing: [warn, { beforeColon: false, afterColon: true }] ## Enforce consistent spacing before and after keywords - keyword-spacing: [error, { before: true, after: true }] + # keyword-spacing: [warn, { before: true, after: true }] ## Enforce position of line comments # line-comment-position: error ## Enforce consistent linebreak style @@ -369,15 +370,15 @@ rules: ## Enforce a maximum depth that blocks can be nested # max-depth: error ## Enforce a maximum line length - max-len: [error, { - code: 120, - ## Ignore imports - ignorePattern: '^(import\s.+\sfrom\s|.*require\()', - ignoreUrls: true, - ignoreRegExpLiterals: true, - ignoreStrings: true, - ignoreTemplateLiterals: true, - }] + # max-len: [warn, { + # code: 120, + # ## 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 @@ -414,7 +415,7 @@ rules: ## Disallow mixed binary operators # no-mixed-operators: error ## Disallow mixed spaces and tabs for indentation - no-mixed-spaces-and-tabs: error + no-mixed-spaces-and-tabs: warn ## Disallow use of chained assignment expressions # no-multi-assign: error ## Disallow multiple empty lines @@ -440,7 +441,7 @@ rules: ## Disallow ternary operators when simpler alternatives exist # no-unneeded-ternary: error ## Disallow whitespace before properties - no-whitespace-before-property: error + # no-whitespace-before-property: warn ## Enforce the location of single-line statements # nonblock-statement-body-position: error ## Enforce consistent line breaks inside braces @@ -457,7 +458,7 @@ rules: ## Require or disallow assignment operator shorthand where possible # operator-assignment: error ## Enforce consistent linebreak style for operators - operator-linebreak: [error, before] + # operator-linebreak: [warn, before] ## Require or disallow padding within blocks # padded-blocks: error ## Require or disallow padding lines between statements @@ -482,11 +483,11 @@ rules: ## 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, - }] + # space-before-function-paren: [warn, { + # anonymous: always, + # named: never, + # asyncArrow: always, + # }] ## Enforce consistent spacing inside parentheses space-in-parens: [error, never] ## Require spacing around infix operators @@ -695,7 +696,7 @@ rules: 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 + # react/jsx-curly-newline: warn ## Enforce or disallow spaces inside of curly braces in JSX attributes and ## expressions (fixable) react/jsx-curly-spacing: error @@ -708,13 +709,13 @@ rules: ## Enforce event handler naming conventions in JSX react/jsx-handler-names: error ## Validate JSX indentation (fixable) - react/jsx-indent: [error, 2, { - checkAttributes: true, - }] + # react/jsx-indent: [warn, 2, { + # checkAttributes: true, + # }] ## Validate props indentation in JSX (fixable) - react/jsx-indent-props: [error, 2] + # react/jsx-indent-props: [warn, 2] ## Validate JSX has key prop when in array or iterator - react/jsx-key: error + # react/jsx-key: warn ## Validate JSX maximum depth react/jsx-max-depth: [error, { max: 10 }] ## Generous ## Limit maximum of props on a single line in JSX (fixable) diff --git a/tgui/.gitattributes b/tgui/.gitattributes index 71550f35c1..ce30adb9e2 100644 --- a/tgui/.gitattributes +++ b/tgui/.gitattributes @@ -15,8 +15,8 @@ yarn.lock text eol=lf bin/tgui text eol=lf -## Treat bundles as binary and ignore them during conflicts -*.bundle.* binary merge=tgui-merge-bundle -*.chunk.* binary merge=tgui-merge-bundle +## Treat bundles as binary +*.bundle.* binary +*.chunk.* binary .yarn/releases/**/* binary .yarn/plugins/**/* binary diff --git a/tgui/.prettierignore b/tgui/.prettierignore new file mode 100644 index 0000000000..2522dec056 --- /dev/null +++ b/tgui/.prettierignore @@ -0,0 +1,19 @@ +## NPM +/**/node_modules + +## Yarn +/.yarn +/yarn.lock +/.pnp.* + +/docs +/public +/packages/tgui-polyfill +/packages/tgfont/static +**/*.json +**/*.yml +**/*.md + +## Build artifacts +/public/.tmp/**/* +/public/*.map diff --git a/tgui/.prettierrc.yml b/tgui/.prettierrc.yml index b64bef0cd0..5dbf435cf1 100644 --- a/tgui/.prettierrc.yml +++ b/tgui/.prettierrc.yml @@ -1,8 +1,10 @@ arrowParens: always -bracketSpacing: true +breakLongMethodChains: true endOfLine: lf +importFormatting: oneline jsxBracketSameLine: true jsxSingleQuote: false +offsetTernaryExpressions: true printWidth: 120 proseWrap: preserve quoteProps: preserve @@ -10,3 +12,4 @@ semi: true singleQuote: true tabWidth: 2 trailingComma: es5 +useTabs: false diff --git a/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs b/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs index e64e6dda16..2a614bf0fb 100644 --- a/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +++ b/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs @@ -1,4 +1,5 @@ /* eslint-disable */ +//prettier-ignore module.exports = { name: "@yarnpkg/plugin-interactive-tools", factory: function (require) { @@ -74,4 +75,4 @@ function(r){function i(e,t){return function(){e.apply(t,arguments)}}function o(e */var n,r,i,o,u;if(Object.defineProperty(t,"__esModule",{value:!0}),"undefined"==typeof window||"function"!=typeof MessageChannel){var a=null,l=null,s=function(){if(null!==a)try{var e=t.unstable_now();a(!0,e),a=null}catch(e){throw setTimeout(s,0),e}},c=Date.now();t.unstable_now=function(){return Date.now()-c},n=function(e){null!==a?setTimeout(n,0,e):(a=e,setTimeout(s,0))},r=function(e,t){l=setTimeout(e,t)},i=function(){clearTimeout(l)},o=function(){return!1},u=t.unstable_forceFrameRate=function(){}}else{var f=window.performance,d=window.Date,p=window.setTimeout,h=window.clearTimeout;if("undefined"!=typeof console){var v=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!=typeof v&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if("object"==typeof f&&"function"==typeof f.now)t.unstable_now=function(){return f.now()};else{var m=d.now();t.unstable_now=function(){return d.now()-m}}var g=!1,y=null,_=-1,b=5,w=0;o=function(){return t.unstable_now()>=w},u=function(){},t.unstable_forceFrameRate=function(e){0>e||125T(u,n))void 0!==l&&0>T(l,u)?(e[r]=l,e[a]=n,r=a):(e[r]=u,e[o]=n,r=o);else{if(!(void 0!==l&&0>T(l,n)))break e;e[r]=l,e[a]=n,r=a}}}return t}return null}function T(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var x=[],A=[],O=1,P=null,I=3,N=!1,M=!1,R=!1;function F(e){for(var t=C(A);null!==t;){if(null===t.callback)k(A);else{if(!(t.startTime<=e))break;k(A),t.sortIndex=t.expirationTime,S(x,t)}t=C(A)}}function L(e){if(R=!1,F(e),!M)if(null!==C(x))M=!0,n(B);else{var t=C(A);null!==t&&r(L,t.startTime-e)}}function B(e,n){M=!1,R&&(R=!1,i()),N=!0;var u=I;try{for(F(n),P=C(x);null!==P&&(!(P.expirationTime>n)||e&&!o());){var a=P.callback;if(null!==a){P.callback=null,I=P.priorityLevel;var l=a(P.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?P.callback=l:P===C(x)&&k(x),F(n)}else k(x);P=C(x)}if(null!==P)var s=!0;else{var c=C(A);null!==c&&r(L,c.startTime-n),s=!1}return s}finally{P=null,I=u,N=!1}}function j(e){switch(e){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var U=u;t.unstable_ImmediatePriority=1,t.unstable_UserBlockingPriority=2,t.unstable_NormalPriority=3,t.unstable_IdlePriority=5,t.unstable_LowPriority=4,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_scheduleCallback=function(e,o,u){var a=t.unstable_now();if("object"==typeof u&&null!==u){var l=u.delay;l="number"==typeof l&&0a?(e.sortIndex=l,S(A,e),null===C(x)&&e===C(A)&&(R?i():R=!0,r(L,l-a))):(e.sortIndex=u,S(x,e),M||N||(M=!0,n(B))),e},t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_shouldYield=function(){var e=t.unstable_now();F(e);var n=C(x);return n!==P&&null!==P&&null!==n&&null!==n.callback&&n.startTime<=e&&n.expirationTime{"use strict";e.exports=n(706)},6458:(e,t,n)=>{var r,i=n(2357),o=n(8082),u=n(8614);function a(){c&&(c=!1,o.forEach((function(e){try{process.removeListener(e,s[e])}catch(e){}})),process.emit=h,process.reallyExit=d,r.count-=1)}function l(e,t,n){r.emitted[e]||(r.emitted[e]=!0,r.emit(e,t,n))}"function"!=typeof u&&(u=u.EventEmitter),process.__signal_exit_emitter__?r=process.__signal_exit_emitter__:((r=process.__signal_exit_emitter__=new u).count=0,r.emitted={}),r.infinite||(r.setMaxListeners(1/0),r.infinite=!0),e.exports=function(e,t){i.equal(typeof e,"function","a callback must be provided for exit handler"),!1===c&&f();var n="exit";t&&t.alwaysLast&&(n="afterexit");return r.on(n,e),function(){r.removeListener(n,e),0===r.listeners("exit").length&&0===r.listeners("afterexit").length&&a()}},e.exports.unload=a;var s={};o.forEach((function(e){s[e]=function(){process.listeners(e).length===r.count&&(a(),l("exit",null,e),l("afterexit",null,e),process.kill(process.pid,e))}})),e.exports.signals=function(){return o},e.exports.load=f;var c=!1;function f(){c||(c=!0,r.count+=1,o=o.filter((function(e){try{return process.on(e,s[e]),!0}catch(e){return!1}})),process.emit=v,process.reallyExit=p)}var d=process.reallyExit;function p(e){process.exitCode=e||0,l("exit",process.exitCode,null),l("afterexit",process.exitCode,null),d.call(process,process.exitCode)}var h=process.emit;function v(e,t){if("exit"===e){void 0!==t&&(process.exitCode=t);var n=h.apply(this,arguments);return l("exit",process.exitCode,null),l("afterexit",process.exitCode,null),n}return h.apply(this,arguments)}},8082:e=>{e.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"],"win32"!==process.platform&&e.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT"),"linux"===process.platform&&e.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")},1566:(e,t,n)=>{"use strict";const r=n(7347),i=n(409),o=n(8483),u=["","›"],a=e=>`${u[0]}[${e}m`,l=(e,t,n)=>{let r=[];e=[...e];for(let n of e){const i=n;n.match(";")&&(n=n.split(";")[0][0]+"0");const u=o.codes.get(parseInt(n,10));if(u){const n=e.indexOf(u.toString());n>=0?e.splice(n,1):r.push(a(t?u:i))}else{if(t){r.push(a(0));break}r.push(a(i))}}if(t&&(r=r.filter((e,t)=>r.indexOf(e)===t),void 0!==n)){const e=a(o.codes.get(parseInt(n,10)));r=r.reduce((t,n)=>n===e?[n,...t]:[...t,n],[])}return r.join("")};e.exports=(e,t,n)=>{const o=[...e.normalize()],a=[];n="number"==typeof n?n:o.length;let s,c=!1,f=0,d="";for(const[p,h]of o.entries()){let o=!1;if(u.includes(h)){const t=/\d[^m]*/.exec(e.slice(p,p+18));s=t&&t.length>0?t[0]:void 0,ft&&f<=n)d+=h;else if(f!==t||c||void 0===s){if(f>=n){d+=l(a,!0,s);break}}else d=l(a)}return d}},9796:(e,t,n)=>{"use strict";const r=n(8759),i=[].concat(n(2282).builtinModules,"bootstrap_node","node").map(e=>new RegExp(`(?:\\(${e}\\.js:\\d+:\\d+\\)$|^\\s*at ${e}\\.js:\\d+:\\d+$)`));i.push(/\(internal\/[^:]+:\d+:\d+\)$/,/\s*at internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);class o{constructor(e){"internals"in(e={ignoredPackages:[],...e})==!1&&(e.internals=o.nodeInternals()),"cwd"in e==!1&&(e.cwd=process.cwd()),this._cwd=e.cwd.replace(/\\/g,"/"),this._internals=[].concat(e.internals,function(e){if(0===e.length)return[];const t=e.map(e=>r(e));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${t.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}(e.ignoredPackages)),this._wrapCallSite=e.wrapCallSite||!1}static nodeInternals(){return[...i]}clean(e,t=0){t=" ".repeat(t),Array.isArray(e)||(e=e.split("\n")),!/^\s*at /.test(e[0])&&/^\s*at /.test(e[1])&&(e=e.slice(1));let n=!1,r=null;const i=[];return e.forEach(e=>{if(e=e.replace(/\\/g,"/"),this._internals.some(t=>t.test(e)))return;const t=/^\s*at /.test(e);n?e=e.trimEnd().replace(/^(\s+)at /,"$1"):(e=e.trim(),t&&(e=e.slice(3))),(e=e.replace(this._cwd+"/",""))&&(t?(r&&(i.push(r),r=null),i.push(e)):(n=!0,r=e))}),i.map(e=>`${t}${e}\n`).join("")}captureString(e,t=this.captureString){"function"==typeof e&&(t=e,e=1/0);const{stackTraceLimit:n}=Error;e&&(Error.stackTraceLimit=e);const r={};Error.captureStackTrace(r,t);const{stack:i}=r;return Error.stackTraceLimit=n,this.clean(i)}capture(e,t=this.capture){"function"==typeof e&&(t=e,e=1/0);const{prepareStackTrace:n,stackTraceLimit:r}=Error;Error.prepareStackTrace=(e,t)=>this._wrapCallSite?t.map(this._wrapCallSite):t,e&&(Error.stackTraceLimit=e);const i={};Error.captureStackTrace(i,t);const{stack:o}=i;return Object.assign(Error,{prepareStackTrace:n,stackTraceLimit:r}),o}at(e=this.at){const[t]=this.capture(1,e);if(!t)return{};const n={line:t.getLineNumber(),column:t.getColumnNumber()};let r;u(n,t.getFileName(),this._cwd),t.isConstructor()&&(n.constructor=!0),t.isEval()&&(n.evalOrigin=t.getEvalOrigin()),t.isNative()&&(n.native=!0);try{r=t.getTypeName()}catch(e){}r&&"Object"!==r&&"[object Object]"!==r&&(n.type=r);const i=t.getFunctionName();i&&(n.function=i);const o=t.getMethodName();return o&&i!==o&&(n.method=o),n}parseLine(e){const t=e&&e.match(a);if(!t)return null;const n="new"===t[1];let r=t[2];const i=t[3],o=t[4],s=Number(t[5]),c=Number(t[6]);let f=t[7];const d=t[8],p=t[9],h="native"===t[10],v=")"===t[11];let m;const g={};if(d&&(g.line=Number(d)),p&&(g.column=Number(p)),v&&f){let e=0;for(let t=f.length-1;t>0;t--)if(")"===f.charAt(t))e++;else if("("===f.charAt(t)&&" "===f.charAt(t-1)&&(e--,-1===e&&" "===f.charAt(t-1))){const e=f.slice(0,t-1),n=f.slice(t+1);f=n,r+=" ("+e;break}}if(r){const e=r.match(l);e&&(r=e[1],m=e[2])}return u(g,f,this._cwd),n&&(g.constructor=!0),i&&(g.evalOrigin=i,g.evalLine=s,g.evalColumn=c,g.evalFile=o&&o.replace(/\\/g,"/")),h&&(g.native=!0),r&&(g.function=r),m&&r!==m&&(g.method=m),g}}function u(e,t,n){t&&((t=t.replace(/\\/g,"/")).startsWith(n+"/")&&(t=t.slice(n.length+1)),e.file=t)}const a=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),l=/^(.*?) \[as (.*?)\]$/;e.exports=o},3262:(e,t,n)=>{"use strict";const r=n(7402),i=n(5640),o=e=>r(e).replace(i()," ").length;e.exports=o,e.exports.default=o},5043:(e,t,n)=>{"use strict";const r=n(7915),i=n(7347),o=n(1013),u=e=>{if("string"!=typeof(e=e.replace(o()," "))||0===e.length)return 0;e=r(e);let t=0;for(let n=0;n=127&&r<=159||(r>=768&&r<=879||(r>65535&&n++,t+=i(r)?2:1))}return t};e.exports=u,e.exports.default=u},7402:(e,t,n)=>{"use strict";const r=n(5378),i=e=>"string"==typeof e?e.replace(r(),""):e;e.exports=i,e.exports.default=i},7915:(e,t,n)=>{"use strict";const r=n(1337);e.exports=e=>"string"==typeof e?e.replace(r(),""):e},9428:(e,t,n)=>{"use strict";const r=n(2087),i=n(3867),o=n(2918),{env:u}=process;let a;function l(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function s(e,t){if(0===a)return 0;if(o("color=16m")||o("color=full")||o("color=truecolor"))return 3;if(o("color=256"))return 2;if(e&&!t&&void 0===a)return 0;const n=a||0;if("dumb"===u.TERM)return n;if("win32"===process.platform){const e=r.release().split(".");return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in u)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(e=>e in u)||"codeship"===u.CI_NAME?1:n;if("TEAMCITY_VERSION"in u)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(u.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in u)return 1;if("truecolor"===u.COLORTERM)return 3;if("TERM_PROGRAM"in u){const e=parseInt((u.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(u.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(u.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(u.TERM)||"COLORTERM"in u?1:n}o("no-color")||o("no-colors")||o("color=false")||o("color=never")?a=0:(o("color")||o("colors")||o("color=true")||o("color=always"))&&(a=1),"FORCE_COLOR"in u&&(a="true"===u.FORCE_COLOR?1:"false"===u.FORCE_COLOR?0:0===u.FORCE_COLOR.length?1:Math.min(parseInt(u.FORCE_COLOR,10),3)),e.exports={supportsColor:function(e){return l(s(e,e&&e.isTTY))},stdout:l(s(!0,i.isatty(1))),stderr:l(s(!0,i.isatty(2)))}},8949:(e,t,n)=>{"use strict";const r=n(5043),i=e=>{let t=0;for(const n of e.split("\n"))t=Math.max(t,r(n));return t};e.exports=i,e.exports.default=i},4332:(e,t,n)=>{"use strict";const r=n(5043),i=n(7915),o=n(8483),u=new Set(["","›"]),a=e=>`${u.values().next().value}[${e}m`,l=(e,t,n)=>{const o=[...t];let a=!1,l=r(i(e[e.length-1]));for(const[t,i]of o.entries()){const s=r(i);if(l+s<=n?e[e.length-1]+=i:(e.push(i),l=0),u.has(i))a=!0;else if(a&&"m"===i){a=!1;continue}a||(l+=s,l===n&&t0&&e.length>1&&(e[e.length-2]+=e.pop())},s=e=>{const t=e.split(" ");let n=t.length;for(;n>0&&!(r(t[n-1])>0);)n--;return n===t.length?e:t.slice(0,n).join(" ")+t.slice(n).join("")},c=(e,t,n={})=>{if(!1!==n.trim&&""===e.trim())return"";let i,c="",f="";const d=(e=>e.split(" ").map(e=>r(e)))(e);let p=[""];for(const[i,o]of e.split(" ").entries()){!1!==n.trim&&(p[p.length-1]=p[p.length-1].trimLeft());let e=r(p[p.length-1]);if(0!==i&&(e>=t&&(!1===n.wordWrap||!1===n.trim)&&(p.push(""),e=0),(e>0||!1===n.trim)&&(p[p.length-1]+=" ",e++)),n.hard&&d[i]>t){const n=t-e,r=1+Math.floor((d[i]-n-1)/t);Math.floor((d[i]-1)/t)t&&e>0&&d[i]>0){if(!1===n.wordWrap&&et&&!1===n.wordWrap?l(p,o,t):p[p.length-1]+=o}}!1!==n.trim&&(p=p.map(s)),c=p.join("\n");for(const[e,t]of[...c].entries()){if(f+=t,u.has(t)){const t=parseFloat(/\d[^m]*/.exec(c.slice(e,e+4)));i=39===t?null:t}const n=o.codes.get(Number(i));i&&n&&("\n"===c[e+1]?f+=a(n):"\n"===t&&(f+=a(i)))}return f};e.exports=(e,t,n)=>String(e).normalize().replace(/\r\n/g,"\n").split("\n").map(e=>c(e,t,n)).join("\n")},3354:function(module,exports){var __WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__,wrapper;wrapper=function(Module,cb){var Module;"function"==typeof Module&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(e,t){return function(){e&&e.apply(this,arguments);try{Module.ccall("nbind_init")}catch(e){return void t(e)}t(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb),Module||(Module=(void 0!==Module?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,nodeFS,nodePath;if(Module.ENVIRONMENT)if("WEB"===Module.ENVIRONMENT)ENVIRONMENT_IS_WEB=!0;else if("WORKER"===Module.ENVIRONMENT)ENVIRONMENT_IS_WORKER=!0;else if("NODE"===Module.ENVIRONMENT)ENVIRONMENT_IS_NODE=!0;else{if("SHELL"!==Module.ENVIRONMENT)throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");ENVIRONMENT_IS_SHELL=!0}else ENVIRONMENT_IS_WEB="object"==typeof window,ENVIRONMENT_IS_WORKER="function"==typeof importScripts,ENVIRONMENT_IS_NODE="object"==typeof process&&!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),Module.read=function(e,t){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),e=nodePath.normalize(e);var n=nodeFS.readFileSync(e);return t?n:n.toString()},Module.readBinary=function(e){var t=Module.read(e,!0);return t.buffer||(t=new Uint8Array(t)),assert(t.buffer),t},Module.load=function(e){globalEval(read(e))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),module.exports=Module,Module.inspect=function(){return"[Emscripten Module object]"};else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),"undefined"!=typeof printErr&&(Module.printErr=printErr),"undefined"!=typeof read?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(e){if("function"==typeof readbuffer)return new Uint8Array(readbuffer(e));var t=read(e,"binary");return assert("object"==typeof t),t},"undefined"!=typeof scriptArgs?Module.arguments=scriptArgs:void 0!==arguments&&(Module.arguments=arguments),"function"==typeof quit&&(Module.quit=function(e,t){quit(e)});else{if(!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER)throw"Unknown runtime environment. Where are we?";if(Module.read=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(e){var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),Module.readAsync=function(e,t,n){var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)},void 0!==arguments&&(Module.arguments=arguments),"undefined"!=typeof console)Module.print||(Module.print=function(e){console.log(e)}),Module.printErr||(Module.printErr=function(e){console.warn(e)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&"undefined"!=typeof dump?function(e){dump(e)}:function(e){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),void 0===Module.setWindowTitle&&(Module.setWindowTitle=function(e){document.title=e})}function globalEval(e){eval.call(null,e)}for(var key in!Module.load&&Module.read&&(Module.load=function(e){globalEval(Module.read(e))}),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(e,t){throw t}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[],moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(e){return tempRet0=e,e},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(e){STACKTOP=e},getNativeTypeSize:function(e){switch(e){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("*"===e[e.length-1])return Runtime.QUANTUM_SIZE;if("i"===e[0]){var t=parseInt(e.substr(1));return assert(t%8==0),t/8}return 0}},getNativeFieldSize:function(e){return Math.max(Runtime.getNativeTypeSize(e),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(e,t){return"double"===t||"i64"===t?7&e&&(assert(4==(7&e)),e+=4):assert(0==(3&e)),e},getAlignSize:function(e,t,n){return n||"i64"!=e&&"double"!=e?e?Math.min(t||(e?Runtime.getNativeFieldSize(e):0),Runtime.QUANTUM_SIZE):Math.min(t,8):8},dynCall:function(e,t,n){return n&&n.length?Module["dynCall_"+e].apply(null,[t].concat(n)):Module["dynCall_"+e].call(null,t)},functionPointers:[],addFunction:function(e){for(var t=0;t>2],n=-16&(t+e+15|0);return HEAP32[DYNAMICTOP_PTR>>2]=n,n>=TOTAL_MEMORY&&!enlargeMemory()?(HEAP32[DYNAMICTOP_PTR>>2]=t,0):t},alignMemory:function(e,t){return e=Math.ceil(e/(t||16))*(t||16)},makeBigInt:function(e,t,n){return n?+(e>>>0)+4294967296*+(t>>>0):+(e>>>0)+4294967296*+(0|t)},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0,cwrap,ccall;function assert(e,t){e||abort("Assertion failed: "+t)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(e){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}function setValue(e,t,n,r){switch("*"===(n=n||"i8").charAt(n.length-1)&&(n="i32"),n){case"i1":case"i8":HEAP8[e>>0]=t;break;case"i16":HEAP16[e>>1]=t;break;case"i32":HEAP32[e>>2]=t;break;case"i64":tempI64=[t>>>0,(tempDouble=t,+Math_abs(tempDouble)>=1?tempDouble>0?(0|Math_min(+Math_floor(tempDouble/4294967296),4294967295))>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[e>>2]=tempI64[0],HEAP32[e+4>>2]=tempI64[1];break;case"float":HEAPF32[e>>2]=t;break;case"double":HEAPF64[e>>3]=t;break;default:abort("invalid type for setValue: "+n)}}function getValue(e,t,n){switch("*"===(t=t||"i8").charAt(t.length-1)&&(t="i32"),t){case"i1":case"i8":return HEAP8[e>>0];case"i16":return HEAP16[e>>1];case"i32":case"i64":return HEAP32[e>>2];case"float":return HEAPF32[e>>2];case"double":return HEAPF64[e>>3];default:abort("invalid type for setValue: "+t)}return null}!function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(e){var t=Runtime.stackAlloc(e.length);return writeArrayToMemory(e,t),t},stringToC:function(e){var t=0;if(null!=e&&0!==e){var n=1+(e.length<<2);stringToUTF8(e,t=Runtime.stackAlloc(n),n)}return t}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(e,t,n,r,i){var o=getCFunc(e),u=[],a=0;if(r)for(var l=0;l>2]=0;for(l=u+o;r>0]=0;return u}if("i8"===a)return e.subarray||e.slice?HEAPU8.set(e,u):HEAPU8.set(new Uint8Array(e),u),u;for(var s,c,f,d=0;d>0],(0!=n||t)&&(i++,!t||i!=t););t||(t=i);var o="";if(r<128){for(var u;t>0;)u=String.fromCharCode.apply(String,HEAPU8.subarray(e,e+Math.min(t,1024))),o=o?o+u:u,e+=1024,t-=1024;return o}return Module.UTF8ToString(e)}function AsciiToString(e){for(var t="";;){var n=HEAP8[e++>>0];if(!n)return t;t+=String.fromCharCode(n)}}function stringToAscii(e,t){return writeAsciiToMemory(e,t,!1)}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,Module.allocate=allocate,Module.getMemory=getMemory,Module.Pointer_stringify=Pointer_stringify,Module.AsciiToString=AsciiToString,Module.stringToAscii=stringToAscii;var UTF8Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(e,t){for(var n=t;e[n];)++n;if(n-t>16&&e.subarray&&UTF8Decoder)return UTF8Decoder.decode(e.subarray(t,n));for(var r,i,o,u,a,l="";;){if(!(r=e[t++]))return l;if(128&r)if(i=63&e[t++],192!=(224&r))if(o=63&e[t++],224==(240&r)?r=(15&r)<<12|i<<6|o:(u=63&e[t++],240==(248&r)?r=(7&r)<<18|i<<12|o<<6|u:(a=63&e[t++],r=248==(252&r)?(3&r)<<24|i<<18|o<<12|u<<6|a:(1&r)<<30|i<<24|o<<18|u<<12|a<<6|63&e[t++])),r<65536)l+=String.fromCharCode(r);else{var s=r-65536;l+=String.fromCharCode(55296|s>>10,56320|1023&s)}else l+=String.fromCharCode((31&r)<<6|i);else l+=String.fromCharCode(r)}}function UTF8ToString(e){return UTF8ArrayToString(HEAPU8,e)}function stringToUTF8Array(e,t,n,r){if(!(r>0))return 0;for(var i=n,o=n+r-1,u=0;u=55296&&a<=57343&&(a=65536+((1023&a)<<10)|1023&e.charCodeAt(++u)),a<=127){if(n>=o)break;t[n++]=a}else if(a<=2047){if(n+1>=o)break;t[n++]=192|a>>6,t[n++]=128|63&a}else if(a<=65535){if(n+2>=o)break;t[n++]=224|a>>12,t[n++]=128|a>>6&63,t[n++]=128|63&a}else if(a<=2097151){if(n+3>=o)break;t[n++]=240|a>>18,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}else if(a<=67108863){if(n+4>=o)break;t[n++]=248|a>>24,t[n++]=128|a>>18&63,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}else{if(n+5>=o)break;t[n++]=252|a>>30,t[n++]=128|a>>24&63,t[n++]=128|a>>18&63,t[n++]=128|a>>12&63,t[n++]=128|a>>6&63,t[n++]=128|63&a}}return t[n]=0,n-i}function stringToUTF8(e,t,n){return stringToUTF8Array(e,HEAPU8,t,n)}function lengthBytesUTF8(e){for(var t=0,n=0;n=55296&&r<=57343&&(r=65536+((1023&r)<<10)|1023&e.charCodeAt(++n)),r<=127?++t:t+=r<=2047?2:r<=65535?3:r<=2097151?4:r<=67108863?5:6}return t}Module.UTF8ArrayToString=UTF8ArrayToString,Module.UTF8ToString=UTF8ToString,Module.stringToUTF8Array=stringToUTF8Array,Module.stringToUTF8=stringToUTF8,Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder="undefined"!=typeof TextDecoder?new TextDecoder("utf-16le"):void 0,HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64,STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;function demangle(e){var t=Module.___cxa_demangle||Module.__cxa_demangle;if(t){try{var n=e.substr(1),r=lengthBytesUTF8(n)+1,i=_malloc(r);stringToUTF8(n,i,r);var o=_malloc(4),u=t(i,0,0,o);if(0===getValue(o,"i32")&&u)return Pointer_stringify(u)}catch(e){}finally{i&&_free(i),o&&_free(o),u&&_free(u)}return e}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),e}function demangleAll(e){return e.replace(/__Z[\w\d_]+/g,(function(e){var t=demangle(e);return e===t?e:e+" ["+t+"]"}))}function jsStackTrace(){var e=new Error;if(!e.stack){try{throw new Error(0)}catch(t){e=t}if(!e.stack)return"(no stack trace available)"}return e.stack.toString()}function stackTrace(){var e=jsStackTrace();return Module.extraStackTrace&&(e+="\n"+Module.extraStackTrace()),demangleAll(e)}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)}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()}Module.stackTrace=stackTrace,STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;function getTotalMemory(){return TOTAL_MEMORY}if(TOTAL_MEMORY0;){var t=e.shift();if("function"!=typeof t){var n=t.func;"number"==typeof n?void 0===t.arg?Module.dynCall_v(n):Module.dynCall_vi(n,t.arg):n(void 0===t.arg?null:t.arg)}else t()}}Module.HEAP=HEAP,Module.buffer=buffer,Module.HEAP8=HEAP8,Module.HEAP16=HEAP16,Module.HEAP32=HEAP32,Module.HEAPU8=HEAPU8,Module.HEAPU16=HEAPU16,Module.HEAPU32=HEAPU32,Module.HEAPF32=HEAPF32,Module.HEAPF64=HEAPF64;var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for("function"==typeof Module.preRun&&(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("function"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(e){__ATPRERUN__.unshift(e)}function addOnInit(e){__ATINIT__.unshift(e)}function addOnPreMain(e){__ATMAIN__.unshift(e)}function addOnExit(e){__ATEXIT__.unshift(e)}function addOnPostRun(e){__ATPOSTRUN__.unshift(e)}function intArrayFromString(e,t,n){var r=n>0?n:lengthBytesUTF8(e)+1,i=new Array(r),o=stringToUTF8Array(e,i,0,i.length);return t&&(i.length=o),i}function intArrayToString(e){for(var t=[],n=0;n255&&(r&=255),t.push(String.fromCharCode(r))}return t.join("")}function writeStringToMemory(e,t,n){var r,i;Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),n&&(i=t+lengthBytesUTF8(e),r=HEAP8[i]),stringToUTF8(e,t,1/0),n&&(HEAP8[i]=r)}function writeArrayToMemory(e,t){HEAP8.set(e,t)}function writeAsciiToMemory(e,t,n){for(var r=0;r>0]=e.charCodeAt(r);n||(HEAP8[t>>0]=0)}if(Module.addOnPreRun=addOnPreRun,Module.addOnInit=addOnInit,Module.addOnPreMain=addOnPreMain,Module.addOnExit=addOnExit,Module.addOnPostRun=addOnPostRun,Module.intArrayFromString=intArrayFromString,Module.intArrayToString=intArrayToString,Module.writeStringToMemory=writeStringToMemory,Module.writeArrayToMemory=writeArrayToMemory,Module.writeAsciiToMemory=writeAsciiToMemory,Math.imul&&-5===Math.imul(4294967295,5)||(Math.imul=function(e,t){var n=65535&e,r=65535&t;return n*r+((e>>>16)*r+n*(t>>>16)<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(e){return froundBuffer[0]=e,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(e){e>>>=0;for(var t=0;t<32;t++)if(e&1<<31-t)return t;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(e){return e<0?Math.ceil(e):Math.floor(e)}),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(e){return e}function addRunDependency(e){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}function removeRunDependency(e){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),0==runDependencies&&(null!==runDependencyWatcher&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var t=dependenciesFulfilled;dependenciesFulfilled=null,t()}}Module.addRunDependency=addRunDependency,Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(e,t,n,r,i,o,u,a){return _nbind.callbackSignatureList[e].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(e,t,n,r,i,o,u,a){return ASM_CONSTS[e](t,n,r,i,o,u,a)}function _emscripten_asm_const_iiiii(e,t,n,r,i){return ASM_CONSTS[e](t,n,r,i)}function _emscripten_asm_const_iiidddddd(e,t,n,r,i,o,u,a,l){return ASM_CONSTS[e](t,n,r,i,o,u,a,l)}function _emscripten_asm_const_iiididi(e,t,n,r,i,o,u){return ASM_CONSTS[e](t,n,r,i,o,u)}function _emscripten_asm_const_iiii(e,t,n,r){return ASM_CONSTS[e](t,n,r)}function _emscripten_asm_const_iiiid(e,t,n,r,i){return ASM_CONSTS[e](t,n,r,i)}function _emscripten_asm_const_iiiiii(e,t,n,r,i,o){return ASM_CONSTS[e](t,n,r,i,o)}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;function _atexit(e,t){__ATEXIT__.unshift({func:e,arg:t})}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(e,t,n,r){var i,o=arguments.length,u=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)u=Reflect.decorate(e,t,n,r);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(u=(o<3?i(u):o>3?i(t,n,u):i(t,n))||u);return o>3&&u&&Object.defineProperty(t,n,u),u}function _defineHidden(e){return function(t,n){Object.defineProperty(t,n,{configurable:!1,enumerable:!1,value:e,writable:!0})}}STATICTOP+=16;var _nbind={};function __nbind_free_external(e){_nbind.externalList[e].dereference(e)}function __nbind_reference_external(e){_nbind.externalList[e].reference()}function _llvm_stackrestore(e){var t=_llvm_stacksave,n=t.LLVM_SAVEDSTACKS[e];t.LLVM_SAVEDSTACKS.splice(e,1),Runtime.stackRestore(n)}function __nbind_register_pool(e,t,n,r){_nbind.Pool.pageSize=e,_nbind.Pool.usedPtr=t/4,_nbind.Pool.rootPtr=n,_nbind.Pool.pagePtr=r/4,HEAP32[t/4]=16909060,1==HEAP8[t]&&(_nbind.bigEndian=!0),HEAP32[t/4]=0,_nbind.makeTypeKindTbl=((i={})[1024]=_nbind.PrimitiveType,i[64]=_nbind.Int64Type,i[2048]=_nbind.BindClass,i[3072]=_nbind.BindClassPtr,i[4096]=_nbind.SharedClassPtr,i[5120]=_nbind.ArrayType,i[6144]=_nbind.ArrayType,i[7168]=_nbind.CStringType,i[9216]=_nbind.CallbackType,i[10240]=_nbind.BindType,i),_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 i,o=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});o.proto=Module,_nbind.BindClass.list.push(o)}function _emscripten_set_main_loop_timing(e,t){if(Browser.mainLoop.timingMode=e,Browser.mainLoop.timingValue=t,!Browser.mainLoop.func)return 1;if(0==e)Browser.mainLoop.scheduler=function(){var e=0|Math.max(0,Browser.mainLoop.tickStartTime+t-_emscripten_get_now());setTimeout(Browser.mainLoop.runner,e)},Browser.mainLoop.method="timeout";else if(1==e)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(2==e){if(!window.setImmediate){var n=[];window.addEventListener("message",(function(e){e.source===window&&"setimmediate"===e.data&&(e.stopPropagation(),n.shift()())}),!0),window.setImmediate=function(e){n.push(e),ENVIRONMENT_IS_WORKER?(void 0===Module.setImmediates&&(Module.setImmediates=[]),Module.setImmediates.push(e),window.postMessage({target:"setimmediate"})):window.postMessage("setimmediate","*")}}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(e,t,n,r,i){var o;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=e,Browser.mainLoop.arg=r,o=void 0!==r?function(){Module.dynCall_vi(e,r)}:function(){Module.dynCall_v(e)};var u=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT)if(Browser.mainLoop.queue.length>0){var e=Date.now(),t=Browser.mainLoop.queue.shift();if(t.func(t.arg),Browser.mainLoop.remainingBlockers){var n=Browser.mainLoop.remainingBlockers,r=n%1==0?n-1:Math.floor(n);t.counted?Browser.mainLoop.remainingBlockers=r:(r+=.5,Browser.mainLoop.remainingBlockers=(8*n+r)/9)}if(console.log('main loop blocker "'+t.name+'" took '+(Date.now()-e)+" ms"),Browser.mainLoop.updateStatus(),u1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0?Browser.mainLoop.scheduler():(0==Browser.mainLoop.timingMode&&(Browser.mainLoop.tickStartTime=_emscripten_get_now()),"timeout"===Browser.mainLoop.method&&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(o),u0?_emscripten_set_main_loop_timing(0,1e3/t):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),n)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 e=Browser.mainLoop.timingMode,t=Browser.mainLoop.timingValue,n=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(n,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(e,t),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var e=Module.statusMessage||"Please wait...",t=Browser.mainLoop.remainingBlockers,n=Browser.mainLoop.expectedBlockers;t?t=6;){var u=r>>i-6&63;i-=6,n+=t[u]}return 2==i?(n+=t[(3&r)<<4],n+="=="):4==i&&(n+=t[(15&r)<<2],n+="="),n}(e),o(s))},s.src=l,Browser.safeSetTimeout((function(){o(s)}),1e4)}};Module.preloadPlugins.push(t);var n=Module.canvas;n&&(n.requestPointerLock=n.requestPointerLock||n.mozRequestPointerLock||n.webkitRequestPointerLock||n.msRequestPointerLock||function(){},n.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},n.exitPointerLock=n.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",r,!1),document.addEventListener("mozpointerlockchange",r,!1),document.addEventListener("webkitpointerlockchange",r,!1),document.addEventListener("mspointerlockchange",r,!1),Module.elementPointerLock&&n.addEventListener("click",(function(e){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),e.preventDefault())}),!1))}function r(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}},createContext:function(e,t,n,r){if(t&&Module.ctx&&e==Module.canvas)return Module.ctx;var i,o;if(t){var u={antialias:!1,alpha:!1};if(r)for(var a in r)u[a]=r[a];(o=GL.createContext(e,u))&&(i=GL.getContext(o).GLctx)}else i=e.getContext("2d");return i?(n&&(t||assert("undefined"==typeof GLctx,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=i,t&&GL.makeContextCurrent(o),Module.useWebGL=t,Browser.moduleContextCreatedCallbacks.forEach((function(e){e()})),Browser.init()),i):null},destroyContext:function(e,t,n){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(e,t,n){Browser.lockPointer=e,Browser.resizeCanvas=t,Browser.vrDevice=n,void 0===Browser.lockPointer&&(Browser.lockPointer=!0),void 0===Browser.resizeCanvas&&(Browser.resizeCanvas=!1),void 0===Browser.vrDevice&&(Browser.vrDevice=null);var r=Module.canvas;function i(){Browser.isFullscreen=!1;var e=r.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===e?(r.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},r.exitFullscreen=r.exitFullscreen.bind(document),Browser.lockPointer&&r.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(e.parentNode.insertBefore(r,e),e.parentNode.removeChild(e),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(r)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",i,!1),document.addEventListener("mozfullscreenchange",i,!1),document.addEventListener("webkitfullscreenchange",i,!1),document.addEventListener("MSFullscreenChange",i,!1));var o=document.createElement("div");r.parentNode.insertBefore(o,r),o.appendChild(r),o.requestFullscreen=o.requestFullscreen||o.mozRequestFullScreen||o.msRequestFullscreen||(o.webkitRequestFullscreen?function(){o.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(o.webkitRequestFullScreen?function(){o.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),n?o.requestFullscreen({vrDisplay:n}):o.requestFullscreen()},requestFullScreen:function(e,t,n){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(e,t,n){return Browser.requestFullscreen(e,t,n)},Browser.requestFullscreen(e,t,n)},nextRAF:0,fakeRequestAnimationFrame:function(e){var t=Date.now();if(0===Browser.nextRAF)Browser.nextRAF=t+1e3/60;else for(;t+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var n=Math.max(Browser.nextRAF-t,0);setTimeout(e,n)},requestAnimationFrame:function(e){"undefined"==typeof window?Browser.fakeRequestAnimationFrame(e):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(e))},safeCallback:function(e){return function(){if(!ABORT)return e.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var e=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],e.forEach((function(e){e()}))}},safeRequestAnimationFrame:function(e){return Browser.requestAnimationFrame((function(){ABORT||(Browser.allowAsyncCallbacks?e():Browser.queuedAsyncCallbacks.push(e))}))},safeSetTimeout:function(e,t){return Module.noExitRuntime=!0,setTimeout((function(){ABORT||(Browser.allowAsyncCallbacks?e():Browser.queuedAsyncCallbacks.push(e))}),t)},safeSetInterval:function(e,t){return Module.noExitRuntime=!0,setInterval((function(){ABORT||Browser.allowAsyncCallbacks&&e()}),t)},getMimetype:function(e){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[e.substr(e.lastIndexOf(".")+1)]},getUserMedia:function(e){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(e)},getMovementX:function(e){return e.movementX||e.mozMovementX||e.webkitMovementX||0},getMovementY:function(e){return e.movementY||e.mozMovementY||e.webkitMovementY||0},getMouseWheelDelta:function(e){var t=0;switch(e.type){case"DOMMouseScroll":t=e.detail;break;case"mousewheel":t=e.wheelDelta;break;case"wheel":t=e.deltaY;break;default:throw"unrecognized mouse wheel event: "+e.type}return t},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(e){if(Browser.pointerLock)"mousemove"!=e.type&&"mozMovementX"in e?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(e),Browser.mouseMovementY=Browser.getMovementY(e)),"undefined"!=typeof SDL?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var t=Module.canvas.getBoundingClientRect(),n=Module.canvas.width,r=Module.canvas.height,i=void 0!==window.scrollX?window.scrollX:window.pageXOffset,o=void 0!==window.scrollY?window.scrollY:window.pageYOffset;if("touchstart"===e.type||"touchend"===e.type||"touchmove"===e.type){var u=e.touch;if(void 0===u)return;var a=u.pageX-(i+t.left),l=u.pageY-(o+t.top),s={x:a*=n/t.width,y:l*=r/t.height};if("touchstart"===e.type)Browser.lastTouches[u.identifier]=s,Browser.touches[u.identifier]=s;else if("touchend"===e.type||"touchmove"===e.type){var c=Browser.touches[u.identifier];c||(c=s),Browser.lastTouches[u.identifier]=c,Browser.touches[u.identifier]=s}return}var f=e.pageX-(i+t.left),d=e.pageY-(o+t.top);f*=n/t.width,d*=r/t.height,Browser.mouseMovementX=f-Browser.mouseX,Browser.mouseMovementY=d-Browser.mouseY,Browser.mouseX=f,Browser.mouseY=d}},asyncLoad:function(e,t,n,r){var i=r?"":getUniqueRunDependency("al "+e);Module.readAsync(e,(function(n){assert(n,'Loading data file "'+e+'" failed (no arrayBuffer).'),t(new Uint8Array(n)),i&&removeRunDependency(i)}),(function(t){if(!n)throw'Loading data file "'+e+'" failed.';n()})),i&&addRunDependency(i)},resizeListeners:[],updateResizeListeners:function(){var e=Module.canvas;Browser.resizeListeners.forEach((function(t){t(e.width,e.height)}))},setCanvasSize:function(e,t,n){var r=Module.canvas;Browser.updateCanvasDimensions(r,e,t),n||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if("undefined"!=typeof SDL){var e=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];e|=8388608,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=e}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if("undefined"!=typeof SDL){var e=HEAPU32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2];e&=-8388609,HEAP32[SDL.screen+0*Runtime.QUANTUM_SIZE>>2]=e}Browser.updateResizeListeners()},updateCanvasDimensions:function(e,t,n){t&&n?(e.widthNative=t,e.heightNative=n):(t=e.widthNative,n=e.heightNative);var r=t,i=n;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(r/i>2]},getStr:function(){return Pointer_stringify(SYSCALLS.get())},get64:function(){var e=SYSCALLS.get(),t=SYSCALLS.get();return assert(e>=0?0===t:-1===t),e},getZero:function(){assert(0===SYSCALLS.get())}};function ___syscall6(e,t){SYSCALLS.varargs=t;try{var n=SYSCALLS.getStreamFromFD();return FS.close(n),0}catch(e){return"undefined"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function ___syscall54(e,t){SYSCALLS.varargs=t;try{return 0}catch(e){return"undefined"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function _typeModule(e){var t=[[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 n(e,t,n,r,i,o){if(1==t){var u=896&r;128!=u&&256!=u&&384!=u||(e="X const")}return(o?n.replace("X",e).replace("Y",i):e.replace("X",n).replace("Y",i)).replace(/([*&]) (?=[*&])/g,"$1")}function r(e,t){var n=t.flags,r=896&n,i=15360&n;return t.name||1024!=i||(1==t.ptrSize?t.name=(16&n?"":(8&n?"un":"")+"signed ")+"char":t.name=(8&n?"u":"")+(32&n?"float":"int")+8*t.ptrSize+"_t"),8!=t.ptrSize||32&n||(i=64),2048==i&&(512==r||640==r?i=4096:r&&(i=3072)),e(i,t)}var i={Type:function(){function e(e){this.id=e.id,this.name=e.name,this.flags=e.flags,this.spec=e}return e.prototype.toString=function(){return this.name},e}(),getComplexType:function e(i,o,u,a,l,s,c,f){void 0===s&&(s="X"),void 0===f&&(f=1);var d=u(i);if(d)return d;var p,h=a(i),v=h.placeholderFlag,m=t[v];c&&m&&(s=n(c[2],c[0],s,m[0],"?",!0)),0==v&&(p="Unbound"),v>=10&&(p="Corrupt"),f>20&&(p="Deeply nested"),p&&function(e,t,n,r,i){throw new Error(e+" type "+n.replace("X",t+"?")+(r?" with flag "+r:"")+" in "+i)}(p,i,s,v,l||"?");var g,y=e(h.paramList[0],o,u,a,l,s,m,f+1),_={flags:m[0],id:i,name:"",paramList:[y]},b=[],w="?";switch(h.placeholderFlag){case 1:g=y.spec;break;case 2:if(1024==(15360&y.flags)&&1==y.spec.ptrSize){_.flags=7168;break}case 3:case 6:case 5:g=y.spec,y.flags;break;case 8:w=""+h.paramList[1],_.paramList.push(h.paramList[1]);break;case 9:for(var E=0,D=h.paramList[1];E>2]=e),e}function _llvm_stacksave(){var e=_llvm_stacksave;return e.LLVM_SAVEDSTACKS||(e.LLVM_SAVEDSTACKS=[]),e.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),e.LLVM_SAVEDSTACKS.length-1}function ___syscall140(e,t){SYSCALLS.varargs=t;try{var n=SYSCALLS.getStreamFromFD(),r=(SYSCALLS.get(),SYSCALLS.get()),i=SYSCALLS.get(),o=SYSCALLS.get(),u=r;return FS.llseek(n,u,o),HEAP32[i>>2]=n.position,n.getdents&&0===u&&0===o&&(n.getdents=null),0}catch(e){return"undefined"!=typeof FS&&e instanceof FS.ErrnoError||abort(e),-e.errno}}function ___syscall146(e,t){SYSCALLS.varargs=t;try{var n=SYSCALLS.get(),r=SYSCALLS.get(),i=SYSCALLS.get(),o=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(e,t){var n=___syscall146.buffers[e];assert(n),0===t||10===t?((1===e?Module.print:Module.printErr)(UTF8ArrayToString(n,0)),n.length=0):n.push(t)});for(var u=0;u>2],l=HEAP32[r+(8*u+4)>>2],s=0;se.pageSize/2||t>e.pageSize-n?_nbind.typeNameTbl.NBind.proto.lalloc(t):(HEAPU32[e.usedPtr]=n+t,e.rootPtr+n)},e.lreset=function(t,n){HEAPU32[e.pagePtr]?_nbind.typeNameTbl.NBind.proto.lreset(t,n):HEAPU32[e.usedPtr]=t},e}();function constructType(e,t){var n=new(10240==e?_nbind.makeTypeNameTbl[t.name]||_nbind.BindType:_nbind.makeTypeKindTbl[e])(t);return typeIdTbl[t.id]=n,_nbind.typeNameTbl[t.name]=n,n}function getType(e){return typeIdTbl[e]}function queryType(e){var t=HEAPU8[e],n=_nbind.structureList[t][1];e/=4,n<0&&(++e,n=HEAPU32[e]+1);var r=Array.prototype.slice.call(HEAPU32.subarray(e+1,e+1+n));return 9==t&&(r=[r[0],r.slice(1)]),{paramList:r,placeholderFlag:t}}function getTypes(e,t){return e.map((function(e){return"number"==typeof e?_nbind.getComplexType(e,constructType,getType,queryType,t):_nbind.typeNameTbl[e]}))}function readTypeIdList(e,t){return Array.prototype.slice.call(HEAPU32,e/4,e/4+t)}function readAsciiString(e){for(var t=e;HEAPU8[t++];);return String.fromCharCode.apply("",HEAPU8.subarray(e,t-1))}function readPolicyList(e){var t={};if(e)for(;;){var n=HEAPU32[e/4];if(!n)break;t[readAsciiString(n)]=!0,e+=4}return t}function getDynCall(e,t){var n={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},r=e.map((function(e){return n[e.name]||"i"})).join(""),i=Module["dynCall_"+r];if(!i)throw new Error("dynCall_"+r+" not found for "+t+"("+e.map((function(e){return e.name})).join(", ")+")");return i}function addMethod(e,t,n,r){var i=e[t];e.hasOwnProperty(t)&&i?((i.arity||0===i.arity)&&(i=_nbind.makeOverloader(i,i.arity),e[t]=i),i.addMethod(n,r)):(n.arity=r,e[t]=n)}function throwError(e){throw new Error(e)}_nbind.Pool=Pool,_nbind.constructType=constructType,_nbind.getType=getType,_nbind.queryType=queryType,_nbind.getTypes=getTypes,_nbind.readTypeIdList=readTypeIdList,_nbind.readAsciiString=readAsciiString,_nbind.readPolicyList=readPolicyList,_nbind.getDynCall=getDynCall,_nbind.addMethod=addMethod,_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(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.heap=HEAPU32,t.ptrSize=4,t}return __extends(t,e),t.prototype.needsWireRead=function(e){return!!this.wireRead||!!this.makeWireRead},t.prototype.needsWireWrite=function(e){return!!this.wireWrite||!!this.makeWireWrite},t}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(e){function t(t){var n=e.call(this,t)||this,r=32&t.flags?{32:HEAPF32,64:HEAPF64}:8&t.flags?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return n.heap=r[8*t.ptrSize],n.ptrSize=t.ptrSize,n}return __extends(t,e),t.prototype.needsWireWrite=function(e){return!!e&&!!e.Strict},t.prototype.makeWireWrite=function(e,t){return t&&t.Strict&&function(e){if("number"==typeof e)return e;throw new Error("Type mismatch")}},t}(BindType);function pushCString(e,t){if(null==e){if(t&&t.Nullable)return 0;throw new Error("Type mismatch")}if(t&&t.Strict){if("string"!=typeof e)throw new Error("Type mismatch")}else e=e.toString();var n=Module.lengthBytesUTF8(e)+1,r=_nbind.Pool.lalloc(n);return Module.stringToUTF8Array(e,HEAPU8,r,n),r}function popCString(e){return 0===e?null:Module.Pointer_stringify(e)}_nbind.PrimitiveType=PrimitiveType,_nbind.pushCString=pushCString,_nbind.popCString=popCString;var CStringType=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wireRead=popCString,t.wireWrite=pushCString,t.readResources=[_nbind.resources.pool],t.writeResources=[_nbind.resources.pool],t}return __extends(t,e),t.prototype.makeWireWrite=function(e,t){return function(e){return pushCString(e,t)}},t}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.wireRead=function(e){return!!e},t}return __extends(t,e),t.prototype.needsWireWrite=function(e){return!!e&&!!e.Strict},t.prototype.makeWireRead=function(e){return"!!("+e+")"},t.prototype.makeWireWrite=function(e,t){return t&&t.Strict&&function(e){if("boolean"==typeof e)return e;throw new Error("Type mismatch")}||e},t}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function e(){}return e.prototype.persist=function(){this.__nbindState|=1},e}();function makeBound(e,t){var n=function(e){function n(t,r,i,o){var u=e.call(this)||this;if(!(u instanceof n))return new(Function.prototype.bind.apply(n,Array.prototype.concat.apply([null],arguments)));var a=r,l=i,s=o;if(t!==_nbind.ptrMarker){var c=u.__nbindConstructor.apply(u,arguments);a=4608,s=HEAPU32[c/4],l=HEAPU32[c/4+1]}var f={configurable:!0,enumerable:!1,value:null,writable:!1},d={__nbindFlags:a,__nbindPtr:l};s&&(d.__nbindShared=s,_nbind.mark(u));for(var p=0,h=Object.keys(d);p>=1;var n=_nbind.valueList[e];return _nbind.valueList[e]=firstFreeValue,firstFreeValue=e,n}if(t)return _nbind.popShared(e,t);throw new Error("Invalid value slot "+e)}_nbind.pushValue=pushValue,_nbind.popValue=popValue;var valueBase=0x10000000000000000;function push64(e){return"number"==typeof e?e:4096*pushValue(e)+valueBase}function pop64(e){return e=3?Buffer.from(o):new Buffer(o)).copy(r):getBuffer(r).set(o)}}_nbind.BufferType=BufferType,_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var e=0,t=dirtyList;e>2]=DYNAMIC_BASE,staticSealed=!0,Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:1/0},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(e,t,n){"use asm";var r=new e.Int8Array(n);var i=new e.Int16Array(n);var o=new e.Int32Array(n);var u=new e.Uint8Array(n);var a=new e.Uint16Array(n);var l=new e.Uint32Array(n);var s=new e.Float32Array(n);var c=new e.Float64Array(n);var f=t.DYNAMICTOP_PTR|0;var d=t.tempDoublePtr|0;var p=t.ABORT|0;var h=t.STACKTOP|0;var v=t.STACK_MAX|0;var m=t.cttz_i8|0;var g=t.___dso_handle|0;var y=0;var _=0;var b=0;var w=0;var E=e.NaN,D=e.Infinity;var S=0,C=0,k=0,T=0,x=0.0;var A=0;var O=e.Math.floor;var P=e.Math.abs;var I=e.Math.sqrt;var N=e.Math.pow;var M=e.Math.cos;var R=e.Math.sin;var F=e.Math.tan;var L=e.Math.acos;var B=e.Math.asin;var j=e.Math.atan;var U=e.Math.atan2;var z=e.Math.exp;var W=e.Math.log;var H=e.Math.ceil;var V=e.Math.imul;var q=e.Math.min;var G=e.Math.max;var $=e.Math.clz32;var Y=e.Math.fround;var K=t.abort;var X=t.assert;var Q=t.enlargeMemory;var J=t.getTotalMemory;var Z=t.abortOnCannotGrowMemory;var ee=t.invoke_viiiii;var te=t.invoke_vif;var ne=t.invoke_vid;var re=t.invoke_fiff;var ie=t.invoke_vi;var oe=t.invoke_vii;var ue=t.invoke_ii;var ae=t.invoke_viddi;var le=t.invoke_vidd;var se=t.invoke_iiii;var ce=t.invoke_diii;var fe=t.invoke_di;var de=t.invoke_iid;var pe=t.invoke_iii;var he=t.invoke_viiddi;var ve=t.invoke_viiiiii;var me=t.invoke_dii;var ge=t.invoke_i;var ye=t.invoke_iiiiii;var _e=t.invoke_viiid;var be=t.invoke_viififi;var we=t.invoke_viii;var Ee=t.invoke_v;var De=t.invoke_viid;var Se=t.invoke_idd;var Ce=t.invoke_viiii;var ke=t._emscripten_asm_const_iiiii;var Te=t._emscripten_asm_const_iiidddddd;var xe=t._emscripten_asm_const_iiiid;var Ae=t.__nbind_reference_external;var Oe=t._emscripten_asm_const_iiiiiiii;var Pe=t._removeAccessorPrefix;var Ie=t._typeModule;var Ne=t.__nbind_register_pool;var Me=t.__decorate;var Re=t._llvm_stackrestore;var Fe=t.___cxa_atexit;var Le=t.__extends;var Be=t.__nbind_get_value_object;var je=t.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj;var Ue=t._emscripten_set_main_loop_timing;var ze=t.__nbind_register_primitive;var We=t.__nbind_register_type;var He=t._emscripten_memcpy_big;var Ve=t.__nbind_register_function;var qe=t.___setErrNo;var Ge=t.__nbind_register_class;var $e=t.__nbind_finish;var Ye=t._abort;var Ke=t._nbind_value;var Xe=t._llvm_stacksave;var Qe=t.___syscall54;var Je=t._defineHidden;var Ze=t._emscripten_set_main_loop;var et=t._emscripten_get_now;var tt=t.__nbind_register_callback_signature;var nt=t._emscripten_asm_const_iiiiii;var rt=t.__nbind_free_external;var it=t._emscripten_asm_const_iiii;var ot=t._emscripten_asm_const_iiididi;var ut=t.___syscall6;var at=t._atexit;var lt=t.___syscall140;var st=t.___syscall146;var ct=Y(0);const ft=Y(0);function dt(e){e=e|0;var t=0;t=h;h=h+e|0;h=h+15&-16;return t|0}function pt(){return h|0}function ht(e){e=e|0;h=e}function vt(e,t){e=e|0;t=t|0;h=e;v=t}function mt(e,t){e=e|0;t=t|0;if(!y){y=e;_=t}}function gt(e){e=e|0;A=e}function yt(){return A|0}function _t(){var e=0,t=0;ix(8104,8,400)|0;ix(8504,408,540)|0;e=9044;t=e+44|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));r[9088]=0;r[9089]=1;o[2273]=0;o[2274]=948;o[2275]=948;Fe(17,8104,g|0)|0;return}function bt(e){e=e|0;qt(e+948|0);return}function wt(e){e=Y(e);return((Ii(e)|0)&2147483647)>>>0>2139095040|0}function Et(e,t,n){e=e|0;t=t|0;n=n|0;e:do{if(!(o[e+(t<<3)+4>>2]|0)){if((t|2|0)==3?o[e+60>>2]|0:0){e=e+56|0;break}switch(t|0){case 0:case 2:case 4:case 5:{if(o[e+52>>2]|0){e=e+48|0;break e}break}default:{}}if(!(o[e+68>>2]|0)){e=(t|1|0)==5?948:n;break}else{e=e+64|0;break}}else e=e+(t<<3)|0}while(0);return e|0}function Dt(e){e=e|0;var t=0;t=qk(1e3)|0;St(e,(t|0)!=0,2456);o[2276]=(o[2276]|0)+1;ix(t|0,8104,1e3)|0;if(r[e+2>>0]|0){o[t+4>>2]=2;o[t+12>>2]=4}o[t+976>>2]=e;return t|0}function St(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;i=h;h=h+16|0;r=i;if(!t){o[r>>2]=n;Lr(e,5,3197,r)}h=i;return}function Ct(){return Dt(956)|0}function kt(e){e=e|0;var t=0;t=$T(1e3)|0;Tt(t,e);St(o[e+976>>2]|0,1,2456);o[2276]=(o[2276]|0)+1;o[t+944>>2]=0;return t|0}function Tt(e,t){e=e|0;t=t|0;var n=0;ix(e|0,t|0,948)|0;Ur(e+948|0,t+948|0);n=e+960|0;e=t+960|0;t=n+40|0;do{o[n>>2]=o[e>>2];n=n+4|0;e=e+4|0}while((n|0)<(t|0));return}function xt(e){e=e|0;var t=0,n=0,r=0,i=0;t=e+944|0;n=o[t>>2]|0;if(n|0){At(n+948|0,e)|0;o[t>>2]=0}n=Ot(e)|0;if(n|0){t=0;do{o[(Pt(e,t)|0)+944>>2]=0;t=t+1|0}while((t|0)!=(n|0))}n=e+948|0;r=o[n>>2]|0;i=e+952|0;t=o[i>>2]|0;if((t|0)!=(r|0))o[i>>2]=t+(~((t+-4-r|0)>>>2)<<2);It(n);Gk(e);o[2276]=(o[2276]|0)+-1;return}function At(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0;r=o[e>>2]|0;l=e+4|0;n=o[l>>2]|0;u=n;e:do{if((r|0)==(n|0)){i=r;a=4}else{e=r;while(1){if((o[e>>2]|0)==(t|0)){i=e;a=4;break e}e=e+4|0;if((e|0)==(n|0)){e=0;break}}}}while(0);if((a|0)==4)if((i|0)!=(n|0)){r=i+4|0;e=u-r|0;t=e>>2;if(t){sx(i|0,r|0,e|0)|0;n=o[l>>2]|0}e=i+(t<<2)|0;if((n|0)==(e|0))e=1;else{o[l>>2]=n+(~((n+-4-e|0)>>>2)<<2);e=1}}else e=0;return e|0}function Ot(e){e=e|0;return(o[e+952>>2]|0)-(o[e+948>>2]|0)>>2|0}function Pt(e,t){e=e|0;t=t|0;var n=0;n=o[e+948>>2]|0;if((o[e+952>>2]|0)-n>>2>>>0>t>>>0)e=o[n+(t<<2)>>2]|0;else e=0;return e|0}function It(e){e=e|0;var t=0,n=0,r=0,i=0;r=h;h=h+32|0;t=r;i=o[e>>2]|0;n=(o[e+4>>2]|0)-i|0;if(((o[e+8>>2]|0)-i|0)>>>0>n>>>0){i=n>>2;Ni(t,i,i,e+8|0);Mi(e,t);Ri(t)}h=r;return}function Nt(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0;c=Ot(e)|0;do{if(c|0){if((o[(Pt(e,0)|0)+944>>2]|0)==(e|0)){if(!(At(e+948|0,t)|0))break;ix(t+400|0,8504,540)|0;o[t+944>>2]=0;Vt(e);break}a=o[(o[e+976>>2]|0)+12>>2]|0;l=e+948|0;s=(a|0)==0;n=0;u=0;do{r=o[(o[l>>2]|0)+(u<<2)>>2]|0;if((r|0)==(t|0))Vt(e);else{i=kt(r)|0;o[(o[l>>2]|0)+(n<<2)>>2]=i;o[i+944>>2]=e;if(!s)RA[a&15](r,i,e,n);n=n+1|0}u=u+1|0}while((u|0)!=(c|0));if(n>>>0>>0){s=e+948|0;l=e+952|0;a=n;n=o[l>>2]|0;do{u=(o[s>>2]|0)+(a<<2)|0;r=u+4|0;i=n-r|0;t=i>>2;if(!t)i=n;else{sx(u|0,r|0,i|0)|0;n=o[l>>2]|0;i=n}r=u+(t<<2)|0;if((i|0)!=(r|0)){n=i+(~((i+-4-r|0)>>>2)<<2)|0;o[l>>2]=n}a=a+1|0}while((a|0)!=(c|0))}}}while(0);return}function Mt(e){e=e|0;var t=0,n=0,i=0,u=0;Rt(e,(Ot(e)|0)==0,2491);Rt(e,(o[e+944>>2]|0)==0,2545);t=e+948|0;n=o[t>>2]|0;i=e+952|0;u=o[i>>2]|0;if((u|0)!=(n|0))o[i>>2]=u+(~((u+-4-n|0)>>>2)<<2);It(t);t=e+976|0;n=o[t>>2]|0;ix(e|0,8104,1e3)|0;if(r[n+2>>0]|0){o[e+4>>2]=2;o[e+12>>2]=4}o[t>>2]=n;return}function Rt(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;i=h;h=h+16|0;r=i;if(!t){o[r>>2]=n;Cr(e,5,3197,r)}h=i;return}function Ft(){return o[2276]|0}function Lt(){var e=0;e=qk(20)|0;Bt((e|0)!=0,2592);o[2277]=(o[2277]|0)+1;o[e>>2]=o[239];o[e+4>>2]=o[240];o[e+8>>2]=o[241];o[e+12>>2]=o[242];o[e+16>>2]=o[243];return e|0}function Bt(e,t){e=e|0;t=t|0;var n=0,r=0;r=h;h=h+16|0;n=r;if(!e){o[n>>2]=t;Cr(0,5,3197,n)}h=r;return}function jt(e){e=e|0;Gk(e);o[2277]=(o[2277]|0)+-1;return}function Ut(e,t){e=e|0;t=t|0;var n=0;if(!t){n=0;t=0}else{Rt(e,(Ot(e)|0)==0,2629);n=1}o[e+964>>2]=t;o[e+988>>2]=n;return}function zt(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;u=r+8|0;i=r+4|0;a=r;o[i>>2]=t;Rt(e,(o[t+944>>2]|0)==0,2709);Rt(e,(o[e+964>>2]|0)==0,2763);Wt(e);t=e+948|0;o[a>>2]=(o[t>>2]|0)+(n<<2);o[u>>2]=o[a>>2];Ht(t,u,i)|0;o[(o[i>>2]|0)+944>>2]=e;Vt(e);h=r;return}function Wt(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0;n=Ot(e)|0;if(n|0?(o[(Pt(e,0)|0)+944>>2]|0)!=(e|0):0){r=o[(o[e+976>>2]|0)+12>>2]|0;i=e+948|0;u=(r|0)==0;t=0;do{a=o[(o[i>>2]|0)+(t<<2)>>2]|0;l=kt(a)|0;o[(o[i>>2]|0)+(t<<2)>>2]=l;o[l+944>>2]=e;if(!u)RA[r&15](a,l,e,t);t=t+1|0}while((t|0)!=(n|0))}return}function Ht(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0;y=h;h=h+64|0;d=y+52|0;l=y+48|0;p=y+28|0;v=y+24|0;m=y+20|0;g=y;r=o[e>>2]|0;u=r;t=r+((o[t>>2]|0)-u>>2<<2)|0;r=e+4|0;i=o[r>>2]|0;a=e+8|0;do{if(i>>>0<(o[a>>2]|0)>>>0){if((t|0)==(i|0)){o[t>>2]=o[n>>2];o[r>>2]=(o[r>>2]|0)+4;break}Fi(e,t,i,t+4|0);if(t>>>0<=n>>>0)n=(o[r>>2]|0)>>>0>n>>>0?n+4|0:n;o[t>>2]=o[n>>2]}else{r=(i-u>>2)+1|0;i=Hr(e)|0;if(i>>>0>>0)UT(e);f=o[e>>2]|0;c=(o[a>>2]|0)-f|0;u=c>>1;Ni(g,c>>2>>>0>>1>>>0?u>>>0>>0?r:u:i,t-f>>2,e+8|0);f=g+8|0;r=o[f>>2]|0;u=g+12|0;c=o[u>>2]|0;a=c;s=r;do{if((r|0)==(c|0)){c=g+4|0;r=o[c>>2]|0;_=o[g>>2]|0;i=_;if(r>>>0<=_>>>0){r=a-i>>1;r=(r|0)==0?1:r;Ni(p,r,r>>>2,o[g+16>>2]|0);o[v>>2]=o[c>>2];o[m>>2]=o[f>>2];o[l>>2]=o[v>>2];o[d>>2]=o[m>>2];Bi(p,l,d);r=o[g>>2]|0;o[g>>2]=o[p>>2];o[p>>2]=r;r=p+4|0;_=o[c>>2]|0;o[c>>2]=o[r>>2];o[r>>2]=_;r=p+8|0;_=o[f>>2]|0;o[f>>2]=o[r>>2];o[r>>2]=_;r=p+12|0;_=o[u>>2]|0;o[u>>2]=o[r>>2];o[r>>2]=_;Ri(p);r=o[f>>2]|0;break}u=r;a=((u-i>>2)+1|0)/-2|0;l=r+(a<<2)|0;i=s-u|0;u=i>>2;if(u){sx(l|0,r|0,i|0)|0;r=o[c>>2]|0}_=l+(u<<2)|0;o[f>>2]=_;o[c>>2]=r+(a<<2);r=_}}while(0);o[r>>2]=o[n>>2];o[f>>2]=(o[f>>2]|0)+4;t=Li(e,g,t)|0;Ri(g)}}while(0);h=y;return t|0}function Vt(e){e=e|0;var t=0;do{t=e+984|0;if(r[t>>0]|0)break;r[t>>0]=1;s[e+504>>2]=Y(E);e=o[e+944>>2]|0}while((e|0)!=0);return}function qt(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-4-r|0)>>>2)<<2);KT(n)}return}function Gt(e){e=e|0;return o[e+944>>2]|0}function $t(e){e=e|0;Rt(e,(o[e+964>>2]|0)!=0,2832);Vt(e);return}function Yt(e){e=e|0;return(r[e+984>>0]|0)!=0|0}function Kt(e,t){e=e|0;t=t|0;if(iT(e,t,400)|0){ix(e|0,t|0,400)|0;Vt(e)}return}function Xt(e){e=e|0;var t=ft;t=Y(s[e+44>>2]);e=wt(t)|0;return Y(e?Y(0.0):t)}function Qt(e){e=e|0;var t=ft;t=Y(s[e+48>>2]);if(wt(t)|0)t=r[(o[e+976>>2]|0)+2>>0]|0?Y(1.0):Y(0.0);return Y(t)}function Jt(e,t){e=e|0;t=t|0;o[e+980>>2]=t;return}function Zt(e){e=e|0;return o[e+980>>2]|0}function en(e,t){e=e|0;t=t|0;var n=0;n=e+4|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function tn(e){e=e|0;return o[e+4>>2]|0}function nn(e,t){e=e|0;t=t|0;var n=0;n=e+8|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function rn(e){e=e|0;return o[e+8>>2]|0}function on(e,t){e=e|0;t=t|0;var n=0;n=e+12|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function un(e){e=e|0;return o[e+12>>2]|0}function an(e,t){e=e|0;t=t|0;var n=0;n=e+16|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function ln(e){e=e|0;return o[e+16>>2]|0}function sn(e,t){e=e|0;t=t|0;var n=0;n=e+20|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function cn(e){e=e|0;return o[e+20>>2]|0}function fn(e,t){e=e|0;t=t|0;var n=0;n=e+24|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function dn(e){e=e|0;return o[e+24>>2]|0}function pn(e,t){e=e|0;t=t|0;var n=0;n=e+28|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function hn(e){e=e|0;return o[e+28>>2]|0}function vn(e,t){e=e|0;t=t|0;var n=0;n=e+32|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function mn(e){e=e|0;return o[e+32>>2]|0}function gn(e,t){e=e|0;t=t|0;var n=0;n=e+36|0;if((o[n>>2]|0)!=(t|0)){o[n>>2]=t;Vt(e)}return}function yn(e){e=e|0;return o[e+36>>2]|0}function _n(e,t){e=e|0;t=Y(t);var n=0;n=e+40|0;if(Y(s[n>>2])!=t){s[n>>2]=t;Vt(e)}return}function bn(e,t){e=e|0;t=Y(t);var n=0;n=e+44|0;if(Y(s[n>>2])!=t){s[n>>2]=t;Vt(e)}return}function wn(e,t){e=e|0;t=Y(t);var n=0;n=e+48|0;if(Y(s[n>>2])!=t){s[n>>2]=t;Vt(e)}return}function En(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+52|0;i=e+56|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Dn(e,t){e=e|0;t=Y(t);var n=0,r=0;r=e+52|0;n=e+56|0;if(!(!(Y(s[r>>2])!=t)?(o[n>>2]|0)==2:0)){s[r>>2]=t;r=wt(t)|0;o[n>>2]=r?3:2;Vt(e)}return}function Sn(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+52|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function Cn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=(u^1)&1;i=e+132+(t<<3)|0;t=e+132+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function kn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=u?0:2;i=e+132+(t<<3)|0;t=e+132+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function Tn(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=t+132+(n<<3)|0;t=o[r+4>>2]|0;n=e;o[n>>2]=o[r>>2];o[n+4>>2]=t;return}function xn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=(u^1)&1;i=e+60+(t<<3)|0;t=e+60+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function An(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=u?0:2;i=e+60+(t<<3)|0;t=e+60+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function On(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=t+60+(n<<3)|0;t=o[r+4>>2]|0;n=e;o[n>>2]=o[r>>2];o[n+4>>2]=t;return}function Pn(e,t){e=e|0;t=t|0;var n=0;n=e+60+(t<<3)+4|0;if((o[n>>2]|0)!=3){s[e+60+(t<<3)>>2]=Y(E);o[n>>2]=3;Vt(e)}return}function In(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=(u^1)&1;i=e+204+(t<<3)|0;t=e+204+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function Nn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=u?0:2;i=e+204+(t<<3)|0;t=e+204+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function Mn(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=t+204+(n<<3)|0;t=o[r+4>>2]|0;n=e;o[n>>2]=o[r>>2];o[n+4>>2]=t;return}function Rn(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0,u=0;u=wt(n)|0;r=(u^1)&1;i=e+276+(t<<3)|0;t=e+276+(t<<3)+4|0;if(!(u|Y(s[i>>2])==n?(o[t>>2]|0)==(r|0):0)){s[i>>2]=n;o[t>>2]=r;Vt(e)}return}function Fn(e,t){e=e|0;t=t|0;return Y(s[e+276+(t<<3)>>2])}function Ln(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+348|0;i=e+352|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Bn(e,t){e=e|0;t=Y(t);var n=0,r=0;r=e+348|0;n=e+352|0;if(!(!(Y(s[r>>2])!=t)?(o[n>>2]|0)==2:0)){s[r>>2]=t;r=wt(t)|0;o[n>>2]=r?3:2;Vt(e)}return}function jn(e){e=e|0;var t=0;t=e+352|0;if((o[t>>2]|0)!=3){s[e+348>>2]=Y(E);o[t>>2]=3;Vt(e)}return}function Un(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+348|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function zn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+356|0;i=e+360|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Wn(e,t){e=e|0;t=Y(t);var n=0,r=0;r=e+356|0;n=e+360|0;if(!(!(Y(s[r>>2])!=t)?(o[n>>2]|0)==2:0)){s[r>>2]=t;r=wt(t)|0;o[n>>2]=r?3:2;Vt(e)}return}function Hn(e){e=e|0;var t=0;t=e+360|0;if((o[t>>2]|0)!=3){s[e+356>>2]=Y(E);o[t>>2]=3;Vt(e)}return}function Vn(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+356|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function qn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+364|0;i=e+368|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Gn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=u?0:2;r=e+364|0;i=e+368|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function $n(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+364|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function Yn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+372|0;i=e+376|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Kn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=u?0:2;r=e+372|0;i=e+376|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Xn(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+372|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function Qn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+380|0;i=e+384|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Jn(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=u?0:2;r=e+380|0;i=e+384|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function Zn(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+380|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function er(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=(u^1)&1;r=e+388|0;i=e+392|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function tr(e,t){e=e|0;t=Y(t);var n=0,r=0,i=0,u=0;u=wt(t)|0;n=u?0:2;r=e+388|0;i=e+392|0;if(!(u|Y(s[r>>2])==t?(o[i>>2]|0)==(n|0):0)){s[r>>2]=t;o[i>>2]=n;Vt(e)}return}function nr(e,t){e=e|0;t=t|0;var n=0,r=0;r=t+388|0;n=o[r+4>>2]|0;t=e;o[t>>2]=o[r>>2];o[t+4>>2]=n;return}function rr(e,t){e=e|0;t=Y(t);var n=0;n=e+396|0;if(Y(s[n>>2])!=t){s[n>>2]=t;Vt(e)}return}function ir(e){e=e|0;return Y(s[e+396>>2])}function or(e){e=e|0;return Y(s[e+400>>2])}function ur(e){e=e|0;return Y(s[e+404>>2])}function ar(e){e=e|0;return Y(s[e+408>>2])}function lr(e){e=e|0;return Y(s[e+412>>2])}function sr(e){e=e|0;return Y(s[e+416>>2])}function cr(e){e=e|0;return Y(s[e+420>>2])}function fr(e,t){e=e|0;t=t|0;Rt(e,(t|0)<6,2918);switch(t|0){case 0:{t=(o[e+496>>2]|0)==2?5:4;break}case 2:{t=(o[e+496>>2]|0)==2?4:5;break}default:{}}return Y(s[e+424+(t<<2)>>2])}function dr(e,t){e=e|0;t=t|0;Rt(e,(t|0)<6,2918);switch(t|0){case 0:{t=(o[e+496>>2]|0)==2?5:4;break}case 2:{t=(o[e+496>>2]|0)==2?4:5;break}default:{}}return Y(s[e+448+(t<<2)>>2])}function pr(e,t){e=e|0;t=t|0;Rt(e,(t|0)<6,2918);switch(t|0){case 0:{t=(o[e+496>>2]|0)==2?5:4;break}case 2:{t=(o[e+496>>2]|0)==2?4:5;break}default:{}}return Y(s[e+472+(t<<2)>>2])}function hr(e,t){e=e|0;t=t|0;var n=0,r=ft;n=o[e+4>>2]|0;if((n|0)==(o[t+4>>2]|0)){if(!n)e=1;else{r=Y(s[e>>2]);e=Y(P(Y(r-Y(s[t>>2]))))>2]=0;o[i+4>>2]=0;o[i+8>>2]=0;je(i|0,e|0,t|0,0);Cr(e,3,(r[i+11>>0]|0)<0?o[i>>2]|0:i,n);XT(i);h=n;return}function yr(e,t,n,r){e=Y(e);t=Y(t);n=n|0;r=r|0;var i=ft;e=Y(e*t);i=Y(LT(e,Y(1.0)));do{if(!(vr(i,Y(0.0))|0)){e=Y(e-i);if(vr(i,Y(1.0))|0){e=Y(e+Y(1.0));break}if(n){e=Y(e+Y(1.0));break}if(!r){if(i>Y(.5))i=Y(1.0);else{r=vr(i,Y(.5))|0;i=r?Y(1.0):Y(0.0)}e=Y(e+i)}}else e=Y(e-i)}while(0);return Y(e/t)}function _r(e,t,n,r,i,o,u,a,l,c,f,d,p){e=e|0;t=Y(t);n=n|0;r=Y(r);i=i|0;o=Y(o);u=u|0;a=Y(a);l=Y(l);c=Y(c);f=Y(f);d=Y(d);p=p|0;var h=0,v=ft,m=ft,g=ft,y=ft,_=ft,b=ft;if(l>2]),v!=Y(0.0)):0){g=Y(yr(t,v,0,0));y=Y(yr(r,v,0,0));m=Y(yr(o,v,0,0));v=Y(yr(a,v,0,0))}else{m=o;g=t;v=a;y=r}if((i|0)==(e|0))h=vr(m,g)|0;else h=0;if((u|0)==(n|0))p=vr(v,y)|0;else p=0;if((!h?(_=Y(t-f),!(br(e,_,l)|0)):0)?!(wr(e,_,i,l)|0):0)h=Er(e,_,i,o,l)|0;else h=1;if((!p?(b=Y(r-d),!(br(n,b,c)|0)):0)?!(wr(n,b,u,c)|0):0)p=Er(n,b,u,a,c)|0;else p=1;p=h&p}return p|0}function br(e,t,n){e=e|0;t=Y(t);n=Y(n);if((e|0)==1)e=vr(t,n)|0;else e=0;return e|0}function wr(e,t,n,r){e=e|0;t=Y(t);n=n|0;r=Y(r);if((e|0)==2&(n|0)==0){if(!(t>=r))e=vr(t,r)|0;else e=1}else e=0;return e|0}function Er(e,t,n,r,i){e=e|0;t=Y(t);n=n|0;r=Y(r);i=Y(i);if((e|0)==2&(n|0)==2&r>t){if(!(i<=t))e=vr(t,i)|0;else e=1}else e=0;return e|0}function Dr(e,t,n,i,u,a,l,f,d,p,v){e=e|0;t=Y(t);n=Y(n);i=i|0;u=u|0;a=a|0;l=Y(l);f=Y(f);d=d|0;p=p|0;v=v|0;var m=0,g=0,y=0,_=0,b=ft,w=ft,E=0,D=0,S=0,C=0,k=0,T=0,x=0,A=0,O=0,P=0,I=0,N=ft,M=ft,R=ft,F=0.0,L=0.0;I=h;h=h+160|0;A=I+152|0;x=I+120|0;T=I+104|0;S=I+72|0;_=I+56|0;k=I+8|0;D=I;C=(o[2279]|0)+1|0;o[2279]=C;O=e+984|0;if((r[O>>0]|0)!=0?(o[e+512>>2]|0)!=(o[2278]|0):0)E=4;else if((o[e+516>>2]|0)==(i|0))P=0;else E=4;if((E|0)==4){o[e+520>>2]=0;o[e+924>>2]=-1;o[e+928>>2]=-1;s[e+932>>2]=Y(-1.0);s[e+936>>2]=Y(-1.0);P=1}e:do{if(!(o[e+964>>2]|0)){if(d){m=e+916|0;if(!(vr(Y(s[m>>2]),t)|0)){E=21;break}if(!(vr(Y(s[e+920>>2]),n)|0)){E=21;break}if((o[e+924>>2]|0)!=(u|0)){E=21;break}m=(o[e+928>>2]|0)==(a|0)?m:0;E=22;break}y=o[e+520>>2]|0;if(!y)E=21;else{g=0;while(1){m=e+524+(g*24|0)|0;if(((vr(Y(s[m>>2]),t)|0?vr(Y(s[e+524+(g*24|0)+4>>2]),n)|0:0)?(o[e+524+(g*24|0)+8>>2]|0)==(u|0):0)?(o[e+524+(g*24|0)+12>>2]|0)==(a|0):0){E=22;break e}g=g+1|0;if(g>>>0>=y>>>0){E=21;break}}}}else{b=Y(Sr(e,2,l));w=Y(Sr(e,0,l));m=e+916|0;R=Y(s[m>>2]);M=Y(s[e+920>>2]);N=Y(s[e+932>>2]);if(!(_r(u,t,a,n,o[e+924>>2]|0,R,o[e+928>>2]|0,M,N,Y(s[e+936>>2]),b,w,v)|0)){y=o[e+520>>2]|0;if(!y)E=21;else{g=0;while(1){m=e+524+(g*24|0)|0;N=Y(s[m>>2]);M=Y(s[e+524+(g*24|0)+4>>2]);R=Y(s[e+524+(g*24|0)+16>>2]);if(_r(u,t,a,n,o[e+524+(g*24|0)+8>>2]|0,N,o[e+524+(g*24|0)+12>>2]|0,M,R,Y(s[e+524+(g*24|0)+20>>2]),b,w,v)|0){E=22;break e}g=g+1|0;if(g>>>0>=y>>>0){E=21;break}}}}else E=22}}while(0);do{if((E|0)==21){if(!(r[11697]|0)){m=0;E=31}else{m=0;E=28}}else if((E|0)==22){g=(r[11697]|0)!=0;if(!((m|0)!=0&(P^1)))if(g){E=28;break}else{E=31;break}_=m+16|0;o[e+908>>2]=o[_>>2];y=m+20|0;o[e+912>>2]=o[y>>2];if(!((r[11698]|0)==0|g^1)){o[D>>2]=kr(C)|0;o[D+4>>2]=C;Cr(e,4,2972,D);g=o[e+972>>2]|0;if(g|0)hA[g&127](e);u=Tr(u,d)|0;a=Tr(a,d)|0;L=+Y(s[_>>2]);F=+Y(s[y>>2]);o[k>>2]=u;o[k+4>>2]=a;c[k+8>>3]=+t;c[k+16>>3]=+n;c[k+24>>3]=L;c[k+32>>3]=F;o[k+40>>2]=p;Cr(e,4,2989,k)}}}while(0);if((E|0)==28){g=kr(C)|0;o[_>>2]=g;o[_+4>>2]=C;o[_+8>>2]=P?3047:11699;Cr(e,4,3038,_);g=o[e+972>>2]|0;if(g|0)hA[g&127](e);k=Tr(u,d)|0;E=Tr(a,d)|0;o[S>>2]=k;o[S+4>>2]=E;c[S+8>>3]=+t;c[S+16>>3]=+n;o[S+24>>2]=p;Cr(e,4,3049,S);E=31}if((E|0)==31){xr(e,t,n,i,u,a,l,f,d,v);if(r[11697]|0){g=o[2279]|0;k=kr(g)|0;o[T>>2]=k;o[T+4>>2]=g;o[T+8>>2]=P?3047:11699;Cr(e,4,3083,T);g=o[e+972>>2]|0;if(g|0)hA[g&127](e);k=Tr(u,d)|0;T=Tr(a,d)|0;F=+Y(s[e+908>>2]);L=+Y(s[e+912>>2]);o[x>>2]=k;o[x+4>>2]=T;c[x+8>>3]=F;c[x+16>>3]=L;o[x+24>>2]=p;Cr(e,4,3092,x)}o[e+516>>2]=i;if(!m){g=e+520|0;m=o[g>>2]|0;if((m|0)==16){if(r[11697]|0)Cr(e,4,3124,A);o[g>>2]=0;m=0}if(d)m=e+916|0;else{o[g>>2]=m+1;m=e+524+(m*24|0)|0}s[m>>2]=t;s[m+4>>2]=n;o[m+8>>2]=u;o[m+12>>2]=a;o[m+16>>2]=o[e+908>>2];o[m+20>>2]=o[e+912>>2];m=0}}if(d){o[e+416>>2]=o[e+908>>2];o[e+420>>2]=o[e+912>>2];r[e+985>>0]=1;r[O>>0]=0}o[2279]=(o[2279]|0)+-1;o[e+512>>2]=o[2278];h=I;return P|(m|0)==0|0}function Sr(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;r=Y(Vr(e,t,n));return Y(r+Y(qr(e,t,n)))}function Cr(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=h;h=h+16|0;i=u;o[i>>2]=r;if(!e)r=0;else r=o[e+976>>2]|0;Br(r,e,t,n,i);h=u;return}function kr(e){e=e|0;return(e>>>0>60?3201:3201+(60-e)|0)|0}function Tr(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+32|0;n=i+12|0;r=i;o[n>>2]=o[254];o[n+4>>2]=o[255];o[n+8>>2]=o[256];o[r>>2]=o[257];o[r+4>>2]=o[258];o[r+8>>2]=o[259];if((e|0)>2)e=11699;else e=o[(t?r:n)+(e<<2)>>2]|0;h=i;return e|0}function xr(e,t,n,i,a,l,c,f,p,v){e=e|0;t=Y(t);n=Y(n);i=i|0;a=a|0;l=l|0;c=Y(c);f=Y(f);p=p|0;v=v|0;var m=0,g=0,y=0,_=0,b=ft,w=ft,E=ft,D=ft,S=ft,C=ft,k=ft,T=0,x=0,A=0,O=ft,P=ft,I=0,N=ft,M=0,R=0,F=0,L=0,B=0,j=0,U=0,z=0,W=0,H=0,V=0,q=0,G=0,$=0,K=0,X=0,Q=0,J=0,Z=ft,ee=ft,te=ft,ne=ft,re=ft,ie=0,oe=0,ue=0,ae=0,le=0,se=ft,ce=ft,fe=ft,de=ft,pe=ft,he=ft,ve=0,me=ft,ge=ft,ye=ft,_e=ft,be=ft,we=ft,Ee=0,De=0,Se=ft,Ce=ft,ke=0,Te=0,xe=0,Ae=0,Oe=ft,Pe=0,Ie=0,Ne=0,Me=0,Re=0,Fe=0,Le=0,Be=ft,je=0,Ue=0;Le=h;h=h+16|0;ie=Le+12|0;oe=Le+8|0;ue=Le+4|0;ae=Le;Rt(e,(a|0)==0|(wt(t)|0)^1,3326);Rt(e,(l|0)==0|(wt(n)|0)^1,3406);Ie=Yr(e,i)|0;o[e+496>>2]=Ie;Re=Kr(2,Ie)|0;Fe=Kr(0,Ie)|0;s[e+440>>2]=Y(Vr(e,Re,c));s[e+444>>2]=Y(qr(e,Re,c));s[e+428>>2]=Y(Vr(e,Fe,c));s[e+436>>2]=Y(qr(e,Fe,c));s[e+464>>2]=Y(Xr(e,Re));s[e+468>>2]=Y(Qr(e,Re));s[e+452>>2]=Y(Xr(e,Fe));s[e+460>>2]=Y(Qr(e,Fe));s[e+488>>2]=Y(Jr(e,Re,c));s[e+492>>2]=Y(Zr(e,Re,c));s[e+476>>2]=Y(Jr(e,Fe,c));s[e+484>>2]=Y(Zr(e,Fe,c));do{if(!(o[e+964>>2]|0)){Ne=e+948|0;Me=(o[e+952>>2]|0)-(o[Ne>>2]|0)>>2;if(!Me){ti(e,t,n,a,l,c,f);break}if(!p?ni(e,t,n,a,l,c,f)|0:0)break;Wt(e);X=e+508|0;r[X>>0]=0;Re=Kr(o[e+4>>2]|0,Ie)|0;Fe=ri(Re,Ie)|0;Pe=Gr(Re)|0;Q=o[e+8>>2]|0;Te=e+28|0;J=(o[Te>>2]|0)!=0;be=Pe?c:f;Se=Pe?f:c;Z=Y(ii(e,Re,c));ee=Y(oi(e,Re,c));b=Y(ii(e,Fe,c));we=Y(ui(e,Re,c));Ce=Y(ui(e,Fe,c));A=Pe?a:l;ke=Pe?l:a;Oe=Pe?we:Ce;S=Pe?Ce:we;_e=Y(Sr(e,2,c));D=Y(Sr(e,0,c));w=Y(Y(Nr(e+364|0,c))-Oe);E=Y(Y(Nr(e+380|0,c))-Oe);C=Y(Y(Nr(e+372|0,f))-S);k=Y(Y(Nr(e+388|0,f))-S);te=Pe?w:C;ne=Pe?E:k;_e=Y(t-_e);t=Y(_e-Oe);if(wt(t)|0)Oe=t;else Oe=Y(NT(Y(RT(t,E)),w));ge=Y(n-D);t=Y(ge-S);if(wt(t)|0)ye=t;else ye=Y(NT(Y(RT(t,k)),C));w=Pe?Oe:ye;me=Pe?ye:Oe;e:do{if((A|0)==1){i=0;g=0;while(1){m=Pt(e,g)|0;if(!i){if(Y(li(m))>Y(0.0)?Y(si(m))>Y(0.0):0)i=m;else i=0}else if(ai(m)|0){_=0;break e}g=g+1|0;if(g>>>0>=Me>>>0){_=i;break}}}else _=0}while(0);T=_+500|0;x=_+504|0;i=0;m=0;t=Y(0.0);y=0;do{g=o[(o[Ne>>2]|0)+(y<<2)>>2]|0;if((o[g+36>>2]|0)==1){ci(g);r[g+985>>0]=1;r[g+984>>0]=0}else{Pr(g);if(p)Mr(g,Yr(g,Ie)|0,w,me,Oe);do{if((o[g+24>>2]|0)!=1){if((g|0)==(_|0)){o[T>>2]=o[2278];s[x>>2]=Y(0.0);break}else{fi(e,g,Oe,a,ye,Oe,ye,l,Ie,v);break}}else{if(m|0)o[m+960>>2]=g;o[g+960>>2]=0;m=g;i=(i|0)==0?g:i}}while(0);he=Y(s[g+504>>2]);t=Y(t+Y(he+Y(Sr(g,Re,Oe))))}y=y+1|0}while((y|0)!=(Me|0));F=t>w;ve=J&((A|0)==2&F)?1:A;M=(ke|0)==1;B=M&(p^1);j=(ve|0)==1;U=(ve|0)==2;z=976+(Re<<2)|0;W=(ke|2|0)==2;$=M&(J^1);H=1040+(Fe<<2)|0;V=1040+(Re<<2)|0;q=976+(Fe<<2)|0;G=(ke|0)!=1;F=J&((A|0)!=0&F);R=e+976|0;M=M^1;t=w;I=0;L=0;he=Y(0.0);re=Y(0.0);while(1){e:do{if(I>>>0>>0){x=o[Ne>>2]|0;y=0;k=Y(0.0);C=Y(0.0);E=Y(0.0);w=Y(0.0);g=0;m=0;_=I;while(1){T=o[x+(_<<2)>>2]|0;if((o[T+36>>2]|0)!=1?(o[T+940>>2]=L,(o[T+24>>2]|0)!=1):0){D=Y(Sr(T,Re,Oe));K=o[z>>2]|0;n=Y(Nr(T+380+(K<<3)|0,be));S=Y(s[T+504>>2]);n=Y(RT(n,S));n=Y(NT(Y(Nr(T+364+(K<<3)|0,be)),n));if(J&(y|0)!=0&Y(D+Y(C+n))>t){l=y;D=k;A=_;break e}D=Y(D+n);n=Y(C+D);D=Y(k+D);if(ai(T)|0){E=Y(E+Y(li(T)));w=Y(w-Y(S*Y(si(T))))}if(m|0)o[m+960>>2]=T;o[T+960>>2]=0;y=y+1|0;m=T;g=(g|0)==0?T:g}else{D=k;n=C}_=_+1|0;if(_>>>0>>0){k=D;C=n}else{l=y;A=_;break}}}else{l=0;D=Y(0.0);E=Y(0.0);w=Y(0.0);g=0;A=I}}while(0);K=E>Y(0.0)&EY(0.0)&wne&((wt(ne)|0)^1))){if(!(r[(o[R>>2]|0)+3>>0]|0)){if(!(O==Y(0.0))?!(Y(li(e))==Y(0.0)):0){K=53;break}t=D;K=53}else K=51}else{t=ne;K=51}}else{t=te;K=51}}else K=51}while(0);if((K|0)==51){K=0;if(wt(t)|0)K=53;else{P=Y(t-D);N=t}}if((K|0)==53){K=0;if(D>2]|0;_=PY(0.0);C=Y(P/O);E=Y(0.0);D=Y(0.0);t=Y(0.0);m=g;do{n=Y(Nr(m+380+(y<<3)|0,be));w=Y(Nr(m+364+(y<<3)|0,be));w=Y(RT(n,Y(NT(w,Y(s[m+504>>2])))));if(_){n=Y(w*Y(si(m)));if(n!=Y(-0.0)?(Be=Y(w-Y(S*n)),se=Y(di(m,Re,Be,N,Oe)),Be!=se):0){E=Y(E-Y(se-w));t=Y(t+n)}}else if((T?(ce=Y(li(m)),ce!=Y(0.0)):0)?(Be=Y(w+Y(C*ce)),fe=Y(di(m,Re,Be,N,Oe)),Be!=fe):0){E=Y(E-Y(fe-w));D=Y(D-ce)}m=o[m+960>>2]|0}while((m|0)!=0);t=Y(k+t);w=Y(P+E);if(!le){S=Y(O+D);_=o[z>>2]|0;T=wY(0.0);S=Y(w/S);t=Y(0.0);do{Be=Y(Nr(g+380+(_<<3)|0,be));E=Y(Nr(g+364+(_<<3)|0,be));E=Y(RT(Be,Y(NT(E,Y(s[g+504>>2])))));if(T){Be=Y(E*Y(si(g)));w=Y(-Be);if(Be!=Y(-0.0)){Be=Y(C*w);w=Y(di(g,Re,Y(E+(x?w:Be)),N,Oe))}else w=E}else if(y?(de=Y(li(g)),de!=Y(0.0)):0)w=Y(di(g,Re,Y(E+Y(S*de)),N,Oe));else w=E;t=Y(t-Y(w-E));D=Y(Sr(g,Re,Oe));n=Y(Sr(g,Fe,Oe));w=Y(w+D);s[oe>>2]=w;o[ae>>2]=1;E=Y(s[g+396>>2]);e:do{if(wt(E)|0){m=wt(me)|0;do{if(!m){if(F|(Ir(g,Fe,me)|0|M))break;if((pi(e,g)|0)!=4)break;if((o[(hi(g,Fe)|0)+4>>2]|0)==3)break;if((o[(vi(g,Fe)|0)+4>>2]|0)==3)break;s[ie>>2]=me;o[ue>>2]=1;break e}}while(0);if(Ir(g,Fe,me)|0){m=o[g+992+(o[q>>2]<<2)>>2]|0;Be=Y(n+Y(Nr(m,me)));s[ie>>2]=Be;m=G&(o[m+4>>2]|0)==2;o[ue>>2]=((wt(Be)|0|m)^1)&1;break}else{s[ie>>2]=me;o[ue>>2]=m?0:2;break}}else{Be=Y(w-D);O=Y(Be/E);Be=Y(E*Be);o[ue>>2]=1;s[ie>>2]=Y(n+(Pe?O:Be))}}while(0);mi(g,Re,N,Oe,ae,oe);mi(g,Fe,me,Oe,ue,ie);do{if(!(Ir(g,Fe,me)|0)?(pi(e,g)|0)==4:0){if((o[(hi(g,Fe)|0)+4>>2]|0)==3){m=0;break}m=(o[(vi(g,Fe)|0)+4>>2]|0)!=3}else m=0}while(0);Be=Y(s[oe>>2]);O=Y(s[ie>>2]);je=o[ae>>2]|0;Ue=o[ue>>2]|0;Dr(g,Pe?Be:O,Pe?O:Be,Ie,Pe?je:Ue,Pe?Ue:je,Oe,ye,p&(m^1),3488,v)|0;r[X>>0]=r[X>>0]|r[g+508>>0];g=o[g+960>>2]|0}while((g|0)!=0)}else t=Y(0.0)}else t=Y(0.0);t=Y(P+t);Ue=t>0]=Ue|u[X>>0];if(U&t>Y(0.0)){m=o[z>>2]|0;if((o[e+364+(m<<3)+4>>2]|0)!=0?(pe=Y(Nr(e+364+(m<<3)|0,be)),pe>=Y(0.0)):0)w=Y(NT(Y(0.0),Y(pe-Y(N-t))));else w=Y(0.0)}else w=t;T=I>>>0>>0;if(T){_=o[Ne>>2]|0;y=I;m=0;do{g=o[_+(y<<2)>>2]|0;if(!(o[g+24>>2]|0)){m=((o[(hi(g,Re)|0)+4>>2]|0)==3&1)+m|0;m=m+((o[(vi(g,Re)|0)+4>>2]|0)==3&1)|0}y=y+1|0}while((y|0)!=(A|0));if(m){D=Y(0.0);n=Y(0.0)}else K=101}else K=101;e:do{if((K|0)==101){K=0;switch(Q|0){case 1:{m=0;D=Y(w*Y(.5));n=Y(0.0);break e}case 2:{m=0;D=w;n=Y(0.0);break e}case 3:{if(l>>>0<=1){m=0;D=Y(0.0);n=Y(0.0);break e}n=Y((l+-1|0)>>>0);m=0;D=Y(0.0);n=Y(Y(NT(w,Y(0.0)))/n);break e}case 5:{n=Y(w/Y((l+1|0)>>>0));m=0;D=n;break e}case 4:{n=Y(w/Y(l>>>0));m=0;D=Y(n*Y(.5));break e}default:{m=0;D=Y(0.0);n=Y(0.0);break e}}}}while(0);t=Y(Z+D);if(T){E=Y(w/Y(m|0));y=o[Ne>>2]|0;g=I;w=Y(0.0);do{m=o[y+(g<<2)>>2]|0;e:do{if((o[m+36>>2]|0)!=1){switch(o[m+24>>2]|0){case 1:{if(gi(m,Re)|0){if(!p)break e;Be=Y(yi(m,Re,N));Be=Y(Be+Y(Xr(e,Re)));Be=Y(Be+Y(Vr(m,Re,Oe)));s[m+400+(o[V>>2]<<2)>>2]=Be;break e}break}case 0:{Ue=(o[(hi(m,Re)|0)+4>>2]|0)==3;Be=Y(E+t);t=Ue?Be:t;if(p){Ue=m+400+(o[V>>2]<<2)|0;s[Ue>>2]=Y(t+Y(s[Ue>>2]))}Ue=(o[(vi(m,Re)|0)+4>>2]|0)==3;Be=Y(E+t);t=Ue?Be:t;if(B){Be=Y(n+Y(Sr(m,Re,Oe)));w=me;t=Y(t+Y(Be+Y(s[m+504>>2])));break e}else{t=Y(t+Y(n+Y(_i(m,Re,Oe))));w=Y(NT(w,Y(_i(m,Fe,Oe))));break e}}default:{}}if(p){Be=Y(D+Y(Xr(e,Re)));Ue=m+400+(o[V>>2]<<2)|0;s[Ue>>2]=Y(Be+Y(s[Ue>>2]))}}}while(0);g=g+1|0}while((g|0)!=(A|0))}else w=Y(0.0);n=Y(ee+t);if(W)D=Y(Y(di(e,Fe,Y(Ce+w),Se,c))-Ce);else D=me;E=Y(Y(di(e,Fe,Y(Ce+($?me:w)),Se,c))-Ce);if(T&p){g=I;do{y=o[(o[Ne>>2]|0)+(g<<2)>>2]|0;do{if((o[y+36>>2]|0)!=1){if((o[y+24>>2]|0)==1){if(gi(y,Fe)|0){Be=Y(yi(y,Fe,me));Be=Y(Be+Y(Xr(e,Fe)));Be=Y(Be+Y(Vr(y,Fe,Oe)));m=o[H>>2]|0;s[y+400+(m<<2)>>2]=Be;if(!(wt(Be)|0))break}else m=o[H>>2]|0;Be=Y(Xr(e,Fe));s[y+400+(m<<2)>>2]=Y(Be+Y(Vr(y,Fe,Oe)));break}m=pi(e,y)|0;do{if((m|0)==4){if((o[(hi(y,Fe)|0)+4>>2]|0)==3){K=139;break}if((o[(vi(y,Fe)|0)+4>>2]|0)==3){K=139;break}if(Ir(y,Fe,me)|0){t=b;break}je=o[y+908+(o[z>>2]<<2)>>2]|0;o[ie>>2]=je;t=Y(s[y+396>>2]);Ue=wt(t)|0;w=(o[d>>2]=je,Y(s[d>>2]));if(Ue)t=E;else{P=Y(Sr(y,Fe,Oe));Be=Y(w/t);t=Y(t*w);t=Y(P+(Pe?Be:t))}s[oe>>2]=t;s[ie>>2]=Y(Y(Sr(y,Re,Oe))+w);o[ue>>2]=1;o[ae>>2]=1;mi(y,Re,N,Oe,ue,ie);mi(y,Fe,me,Oe,ae,oe);t=Y(s[ie>>2]);P=Y(s[oe>>2]);Be=Pe?t:P;t=Pe?P:t;Ue=((wt(Be)|0)^1)&1;Dr(y,Be,t,Ie,Ue,((wt(t)|0)^1)&1,Oe,ye,1,3493,v)|0;t=b}else K=139}while(0);e:do{if((K|0)==139){K=0;t=Y(D-Y(_i(y,Fe,Oe)));do{if((o[(hi(y,Fe)|0)+4>>2]|0)==3){if((o[(vi(y,Fe)|0)+4>>2]|0)!=3)break;t=Y(b+Y(NT(Y(0.0),Y(t*Y(.5)))));break e}}while(0);if((o[(vi(y,Fe)|0)+4>>2]|0)==3){t=b;break}if((o[(hi(y,Fe)|0)+4>>2]|0)==3){t=Y(b+Y(NT(Y(0.0),t)));break}switch(m|0){case 1:{t=b;break e}case 2:{t=Y(b+Y(t*Y(.5)));break e}default:{t=Y(b+t);break e}}}}while(0);Be=Y(he+t);Ue=y+400+(o[H>>2]<<2)|0;s[Ue>>2]=Y(Be+Y(s[Ue>>2]))}}while(0);g=g+1|0}while((g|0)!=(A|0))}he=Y(he+E);re=Y(NT(re,n));l=L+1|0;if(A>>>0>=Me>>>0)break;else{t=N;I=A;L=l}}do{if(p){m=l>>>0>1;if(!m?!(bi(e)|0):0)break;if(!(wt(me)|0)){t=Y(me-he);e:do{switch(o[e+12>>2]|0){case 3:{b=Y(b+t);C=Y(0.0);break}case 2:{b=Y(b+Y(t*Y(.5)));C=Y(0.0);break}case 4:{if(me>he)C=Y(t/Y(l>>>0));else C=Y(0.0);break}case 7:if(me>he){b=Y(b+Y(t/Y(l<<1>>>0)));C=Y(t/Y(l>>>0));C=m?C:Y(0.0);break e}else{b=Y(b+Y(t*Y(.5)));C=Y(0.0);break e}case 6:{C=Y(t/Y(L>>>0));C=me>he&m?C:Y(0.0);break}default:C=Y(0.0)}}while(0);if(l|0){T=1040+(Fe<<2)|0;x=976+(Fe<<2)|0;_=0;g=0;while(1){e:do{if(g>>>0>>0){w=Y(0.0);E=Y(0.0);t=Y(0.0);y=g;while(1){m=o[(o[Ne>>2]|0)+(y<<2)>>2]|0;do{if((o[m+36>>2]|0)!=1?(o[m+24>>2]|0)==0:0){if((o[m+940>>2]|0)!=(_|0))break e;if(wi(m,Fe)|0){Be=Y(s[m+908+(o[x>>2]<<2)>>2]);t=Y(NT(t,Y(Be+Y(Sr(m,Fe,Oe)))))}if((pi(e,m)|0)!=5)break;pe=Y(Ei(m));pe=Y(pe+Y(Vr(m,0,Oe)));Be=Y(s[m+912>>2]);Be=Y(Y(Be+Y(Sr(m,0,Oe)))-pe);pe=Y(NT(E,pe));Be=Y(NT(w,Be));w=Be;E=pe;t=Y(NT(t,Y(pe+Be)))}}while(0);m=y+1|0;if(m>>>0>>0)y=m;else{y=m;break}}}else{E=Y(0.0);t=Y(0.0);y=g}}while(0);S=Y(C+t);n=b;b=Y(b+S);if(g>>>0>>0){D=Y(n+E);m=g;do{g=o[(o[Ne>>2]|0)+(m<<2)>>2]|0;e:do{if((o[g+36>>2]|0)!=1?(o[g+24>>2]|0)==0:0)switch(pi(e,g)|0){case 1:{Be=Y(n+Y(Vr(g,Fe,Oe)));s[g+400+(o[T>>2]<<2)>>2]=Be;break e}case 3:{Be=Y(Y(b-Y(qr(g,Fe,Oe)))-Y(s[g+908+(o[x>>2]<<2)>>2]));s[g+400+(o[T>>2]<<2)>>2]=Be;break e}case 2:{Be=Y(n+Y(Y(S-Y(s[g+908+(o[x>>2]<<2)>>2]))*Y(.5)));s[g+400+(o[T>>2]<<2)>>2]=Be;break e}case 4:{Be=Y(n+Y(Vr(g,Fe,Oe)));s[g+400+(o[T>>2]<<2)>>2]=Be;if(Ir(g,Fe,me)|0)break e;if(Pe){w=Y(s[g+908>>2]);t=Y(w+Y(Sr(g,Re,Oe)));E=S}else{E=Y(s[g+912>>2]);E=Y(E+Y(Sr(g,Fe,Oe)));t=S;w=Y(s[g+908>>2])}if(vr(t,w)|0?vr(E,Y(s[g+912>>2]))|0:0)break e;Dr(g,t,E,Ie,1,1,Oe,ye,1,3501,v)|0;break e}case 5:{s[g+404>>2]=Y(Y(D-Y(Ei(g)))+Y(yi(g,0,me)));break e}default:break e}}while(0);m=m+1|0}while((m|0)!=(y|0))}_=_+1|0;if((_|0)==(l|0))break;else g=y}}}}}while(0);s[e+908>>2]=Y(di(e,2,_e,c,c));s[e+912>>2]=Y(di(e,0,ge,f,c));if((ve|0)!=0?(Ee=o[e+32>>2]|0,De=(ve|0)==2,!(De&(Ee|0)!=2)):0){if(De&(Ee|0)==2){t=Y(we+N);t=Y(NT(Y(RT(t,Y(Di(e,Re,re,be)))),we));K=198}}else{t=Y(di(e,Re,re,be,c));K=198}if((K|0)==198)s[e+908+(o[976+(Re<<2)>>2]<<2)>>2]=t;if((ke|0)!=0?(xe=o[e+32>>2]|0,Ae=(ke|0)==2,!(Ae&(xe|0)!=2)):0){if(Ae&(xe|0)==2){t=Y(Ce+me);t=Y(NT(Y(RT(t,Y(Di(e,Fe,Y(Ce+he),Se)))),Ce));K=204}}else{t=Y(di(e,Fe,Y(Ce+he),Se,c));K=204}if((K|0)==204)s[e+908+(o[976+(Fe<<2)>>2]<<2)>>2]=t;if(p){if((o[Te>>2]|0)==2){g=976+(Fe<<2)|0;y=1040+(Fe<<2)|0;m=0;do{_=Pt(e,m)|0;if(!(o[_+24>>2]|0)){je=o[g>>2]|0;Be=Y(s[e+908+(je<<2)>>2]);Ue=_+400+(o[y>>2]<<2)|0;Be=Y(Be-Y(s[Ue>>2]));s[Ue>>2]=Y(Be-Y(s[_+908+(je<<2)>>2]))}m=m+1|0}while((m|0)!=(Me|0))}if(i|0){m=Pe?ve:a;do{Si(e,i,Oe,m,ye,Ie,v);i=o[i+960>>2]|0}while((i|0)!=0)}m=(Re|2|0)==3;g=(Fe|2|0)==3;if(m|g){i=0;do{y=o[(o[Ne>>2]|0)+(i<<2)>>2]|0;if((o[y+36>>2]|0)!=1){if(m)Ci(e,y,Re);if(g)Ci(e,y,Fe)}i=i+1|0}while((i|0)!=(Me|0))}}}else ei(e,t,n,a,l,c,f)}while(0);h=Le;return}function Ar(e,t){e=e|0;t=Y(t);var n=0;St(e,t>=Y(0.0),3147);n=t==Y(0.0);s[e+4>>2]=n?Y(0.0):t;return}function Or(e,t,n,i){e=e|0;t=Y(t);n=Y(n);i=i|0;var u=ft,a=ft,l=0,c=0,f=0;o[2278]=(o[2278]|0)+1;Pr(e);if(!(Ir(e,2,t)|0)){u=Y(Nr(e+380|0,t));if(!(u>=Y(0.0))){f=((wt(t)|0)^1)&1;u=t}else f=2}else{u=Y(Nr(o[e+992>>2]|0,t));f=1;u=Y(u+Y(Sr(e,2,t)))}if(!(Ir(e,0,n)|0)){a=Y(Nr(e+388|0,n));if(!(a>=Y(0.0))){c=((wt(n)|0)^1)&1;a=n}else c=2}else{a=Y(Nr(o[e+996>>2]|0,n));c=1;a=Y(a+Y(Sr(e,0,t)))}l=e+976|0;if(Dr(e,u,a,i,f,c,t,n,1,3189,o[l>>2]|0)|0?(Mr(e,o[e+496>>2]|0,t,n,t),Rr(e,Y(s[(o[l>>2]|0)+4>>2]),Y(0.0),Y(0.0)),r[11696]|0):0)mr(e,7);return}function Pr(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;a=l+24|0;u=l+16|0;r=l+8|0;i=l;n=0;do{t=e+380+(n<<3)|0;if(!((o[e+380+(n<<3)+4>>2]|0)!=0?(s=t,c=o[s+4>>2]|0,f=r,o[f>>2]=o[s>>2],o[f+4>>2]=c,f=e+364+(n<<3)|0,c=o[f+4>>2]|0,s=i,o[s>>2]=o[f>>2],o[s+4>>2]=c,o[u>>2]=o[r>>2],o[u+4>>2]=o[r+4>>2],o[a>>2]=o[i>>2],o[a+4>>2]=o[i+4>>2],hr(u,a)|0):0))t=e+348+(n<<3)|0;o[e+992+(n<<2)>>2]=t;n=n+1|0}while((n|0)!=2);h=l;return}function Ir(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0;e=o[e+992+(o[976+(t<<2)>>2]<<2)>>2]|0;switch(o[e+4>>2]|0){case 0:case 3:{e=0;break}case 1:{if(Y(s[e>>2])>2])>2]|0){case 2:{t=Y(Y(Y(s[e>>2])*t)/Y(100.0));break}case 1:{t=Y(s[e>>2]);break}default:t=Y(E)}return Y(t)}function Mr(e,t,n,r,i){e=e|0;t=t|0;n=Y(n);r=Y(r);i=Y(i);var u=0,a=ft;t=o[e+944>>2]|0?t:1;u=Kr(o[e+4>>2]|0,t)|0;t=ri(u,t)|0;n=Y(Pi(e,u,n));r=Y(Pi(e,t,r));a=Y(n+Y(Vr(e,u,i)));s[e+400+(o[1040+(u<<2)>>2]<<2)>>2]=a;n=Y(n+Y(qr(e,u,i)));s[e+400+(o[1e3+(u<<2)>>2]<<2)>>2]=n;n=Y(r+Y(Vr(e,t,i)));s[e+400+(o[1040+(t<<2)>>2]<<2)>>2]=n;i=Y(r+Y(qr(e,t,i)));s[e+400+(o[1e3+(t<<2)>>2]<<2)>>2]=i;return}function Rr(e,t,n,r){e=e|0;t=Y(t);n=Y(n);r=Y(r);var i=0,u=0,a=ft,l=ft,c=0,f=0,d=ft,p=0,h=ft,v=ft,m=ft,g=ft;if(!(t==Y(0.0))){i=e+400|0;g=Y(s[i>>2]);u=e+404|0;m=Y(s[u>>2]);p=e+416|0;v=Y(s[p>>2]);f=e+420|0;a=Y(s[f>>2]);h=Y(g+n);d=Y(m+r);r=Y(h+v);l=Y(d+a);c=(o[e+988>>2]|0)==1;s[i>>2]=Y(yr(g,t,0,c));s[u>>2]=Y(yr(m,t,0,c));n=Y(LT(Y(v*t),Y(1.0)));if(vr(n,Y(0.0))|0)u=0;else u=(vr(n,Y(1.0))|0)^1;n=Y(LT(Y(a*t),Y(1.0)));if(vr(n,Y(0.0))|0)i=0;else i=(vr(n,Y(1.0))|0)^1;g=Y(yr(r,t,c&u,c&(u^1)));s[p>>2]=Y(g-Y(yr(h,t,0,c)));g=Y(yr(l,t,c&i,c&(i^1)));s[f>>2]=Y(g-Y(yr(d,t,0,c)));u=(o[e+952>>2]|0)-(o[e+948>>2]|0)>>2;if(u|0){i=0;do{Rr(Pt(e,i)|0,t,h,d);i=i+1|0}while((i|0)!=(u|0))}}return}function Fr(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;switch(n|0){case 5:case 0:{e=oT(o[489]|0,r,i)|0;break}default:e=jT(r,i)|0}return e|0}function Lr(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;i=h;h=h+16|0;u=i;o[u>>2]=r;Br(e,0,t,n,u);h=i;return}function Br(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;e=e|0?e:956;xA[o[e+8>>2]&1](e,t,n,r,i)|0;if((n|0)==5)Ye();else return}function jr(e,t,n){e=e|0;t=t|0;n=n|0;r[e+t>>0]=n&1;return}function Ur(e,t){e=e|0;t=t|0;var n=0,r=0;o[e>>2]=0;o[e+4>>2]=0;o[e+8>>2]=0;n=t+4|0;r=(o[n>>2]|0)-(o[t>>2]|0)>>2;if(r|0){zr(e,r);Wr(e,o[t>>2]|0,o[n>>2]|0,r)}return}function zr(e,t){e=e|0;t=t|0;var n=0;if((Hr(e)|0)>>>0>>0)UT(e);if(t>>>0>1073741823)Ye();else{n=$T(t<<2)|0;o[e+4>>2]=n;o[e>>2]=n;o[e+8>>2]=n+(t<<2);return}}function Wr(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;r=e+4|0;e=n-t|0;if((e|0)>0){ix(o[r>>2]|0,t|0,e|0)|0;o[r>>2]=(o[r>>2]|0)+(e>>>2<<2)}return}function Hr(e){e=e|0;return 1073741823}function Vr(e,t,n){e=e|0;t=t|0;n=Y(n);if(Gr(t)|0?(o[e+96>>2]|0)!=0:0)e=e+92|0;else e=Et(e+60|0,o[1040+(t<<2)>>2]|0,992)|0;return Y($r(e,n))}function qr(e,t,n){e=e|0;t=t|0;n=Y(n);if(Gr(t)|0?(o[e+104>>2]|0)!=0:0)e=e+100|0;else e=Et(e+60|0,o[1e3+(t<<2)>>2]|0,992)|0;return Y($r(e,n))}function Gr(e){e=e|0;return(e|1|0)==3|0}function $r(e,t){e=e|0;t=Y(t);if((o[e+4>>2]|0)==3)t=Y(0.0);else t=Y(Nr(e,t));return Y(t)}function Yr(e,t){e=e|0;t=t|0;e=o[e>>2]|0;return((e|0)==0?(t|0)>1?t:1:e)|0}function Kr(e,t){e=e|0;t=t|0;var n=0;e:do{if((t|0)==2){switch(e|0){case 2:{e=3;break e}case 3:break;default:{n=4;break e}}e=2}else n=4}while(0);return e|0}function Xr(e,t){e=e|0;t=t|0;var n=ft;if(!((Gr(t)|0?(o[e+312>>2]|0)!=0:0)?(n=Y(s[e+308>>2]),n>=Y(0.0)):0))n=Y(NT(Y(s[(Et(e+276|0,o[1040+(t<<2)>>2]|0,992)|0)>>2]),Y(0.0)));return Y(n)}function Qr(e,t){e=e|0;t=t|0;var n=ft;if(!((Gr(t)|0?(o[e+320>>2]|0)!=0:0)?(n=Y(s[e+316>>2]),n>=Y(0.0)):0))n=Y(NT(Y(s[(Et(e+276|0,o[1e3+(t<<2)>>2]|0,992)|0)>>2]),Y(0.0)));return Y(n)}function Jr(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;if(!((Gr(t)|0?(o[e+240>>2]|0)!=0:0)?(r=Y(Nr(e+236|0,n)),r>=Y(0.0)):0))r=Y(NT(Y(Nr(Et(e+204|0,o[1040+(t<<2)>>2]|0,992)|0,n)),Y(0.0)));return Y(r)}function Zr(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;if(!((Gr(t)|0?(o[e+248>>2]|0)!=0:0)?(r=Y(Nr(e+244|0,n)),r>=Y(0.0)):0))r=Y(NT(Y(Nr(Et(e+204|0,o[1e3+(t<<2)>>2]|0,992)|0,n)),Y(0.0)));return Y(r)}function ei(e,t,n,r,i,u,a){e=e|0;t=Y(t);n=Y(n);r=r|0;i=i|0;u=Y(u);a=Y(a);var l=ft,c=ft,f=ft,d=ft,p=ft,v=ft,m=0,g=0,y=0;y=h;h=h+16|0;m=y;g=e+964|0;Rt(e,(o[g>>2]|0)!=0,3519);l=Y(ui(e,2,t));c=Y(ui(e,0,t));f=Y(Sr(e,2,t));d=Y(Sr(e,0,t));if(wt(t)|0)p=t;else p=Y(NT(Y(0.0),Y(Y(t-f)-l)));if(wt(n)|0)v=n;else v=Y(NT(Y(0.0),Y(Y(n-d)-c)));if((r|0)==1&(i|0)==1){s[e+908>>2]=Y(di(e,2,Y(t-f),u,u));t=Y(di(e,0,Y(n-d),a,u))}else{OA[o[g>>2]&1](m,e,p,r,v,i);p=Y(l+Y(s[m>>2]));v=Y(t-f);s[e+908>>2]=Y(di(e,2,(r|2|0)==2?p:v,u,u));v=Y(c+Y(s[m+4>>2]));t=Y(n-d);t=Y(di(e,0,(i|2|0)==2?v:t,a,u))}s[e+912>>2]=t;h=y;return}function ti(e,t,n,r,i,o,u){e=e|0;t=Y(t);n=Y(n);r=r|0;i=i|0;o=Y(o);u=Y(u);var a=ft,l=ft,c=ft,f=ft;c=Y(ui(e,2,o));a=Y(ui(e,0,o));f=Y(Sr(e,2,o));l=Y(Sr(e,0,o));t=Y(t-f);s[e+908>>2]=Y(di(e,2,(r|2|0)==2?c:t,o,o));n=Y(n-l);s[e+912>>2]=Y(di(e,0,(i|2|0)==2?a:n,u,o));return}function ni(e,t,n,r,i,o,u){e=e|0;t=Y(t);n=Y(n);r=r|0;i=i|0;o=Y(o);u=Y(u);var a=0,l=ft,c=ft;a=(r|0)==2;if((!(t<=Y(0.0)&a)?!(n<=Y(0.0)&(i|0)==2):0)?!((r|0)==1&(i|0)==1):0)e=0;else{l=Y(Sr(e,0,o));c=Y(Sr(e,2,o));a=t>2]=Y(di(e,2,a?Y(0.0):t,o,o));t=Y(n-l);a=n>2]=Y(di(e,0,a?Y(0.0):t,u,o));e=1}return e|0}function ri(e,t){e=e|0;t=t|0;if(ki(e)|0)e=Kr(2,t)|0;else e=0;return e|0}function ii(e,t,n){e=e|0;t=t|0;n=Y(n);n=Y(Jr(e,t,n));return Y(n+Y(Xr(e,t)))}function oi(e,t,n){e=e|0;t=t|0;n=Y(n);n=Y(Zr(e,t,n));return Y(n+Y(Qr(e,t)))}function ui(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;r=Y(ii(e,t,n));return Y(r+Y(oi(e,t,n)))}function ai(e){e=e|0;if(!(o[e+24>>2]|0)){if(Y(li(e))!=Y(0.0))e=1;else e=Y(si(e))!=Y(0.0)}else e=0;return e|0}function li(e){e=e|0;var t=ft;if(o[e+944>>2]|0){t=Y(s[e+44>>2]);if(wt(t)|0){t=Y(s[e+40>>2]);e=t>Y(0.0)&((wt(t)|0)^1);return Y(e?t:Y(0.0))}}else t=Y(0.0);return Y(t)}function si(e){e=e|0;var t=ft,n=0,i=ft;do{if(o[e+944>>2]|0){t=Y(s[e+48>>2]);if(wt(t)|0){n=r[(o[e+976>>2]|0)+2>>0]|0;if(n<<24>>24==0?(i=Y(s[e+40>>2]),i>24?Y(1.0):Y(0.0)}}else t=Y(0.0)}while(0);return Y(t)}function ci(e){e=e|0;var t=0,n=0;tx(e+400|0,0,540)|0;r[e+985>>0]=1;Wt(e);n=Ot(e)|0;if(n|0){t=e+948|0;e=0;do{ci(o[(o[t>>2]|0)+(e<<2)>>2]|0);e=e+1|0}while((e|0)!=(n|0))}return}function fi(e,t,n,r,i,u,a,l,c,f){e=e|0;t=t|0;n=Y(n);r=r|0;i=Y(i);u=Y(u);a=Y(a);l=l|0;c=c|0;f=f|0;var d=0,p=ft,v=0,m=0,g=ft,y=ft,_=0,b=ft,w=0,D=ft,S=0,C=0,k=0,T=0,x=0,A=0,O=0,P=0,I=0,N=0;I=h;h=h+16|0;k=I+12|0;T=I+8|0;x=I+4|0;A=I;P=Kr(o[e+4>>2]|0,c)|0;S=Gr(P)|0;p=Y(Nr(Ti(t)|0,S?u:a));C=Ir(t,2,u)|0;O=Ir(t,0,a)|0;do{if(!(wt(p)|0)?!(wt(S?n:i)|0):0){d=t+504|0;if(!(wt(Y(s[d>>2]))|0)){if(!(xi(o[t+976>>2]|0,0)|0))break;if((o[t+500>>2]|0)==(o[2278]|0))break}s[d>>2]=Y(NT(p,Y(ui(t,P,u))))}else v=7}while(0);do{if((v|0)==7){w=S^1;if(!(w|C^1)){a=Y(Nr(o[t+992>>2]|0,u));s[t+504>>2]=Y(NT(a,Y(ui(t,2,u))));break}if(!(S|O^1)){a=Y(Nr(o[t+996>>2]|0,a));s[t+504>>2]=Y(NT(a,Y(ui(t,0,u))));break}s[k>>2]=Y(E);s[T>>2]=Y(E);o[x>>2]=0;o[A>>2]=0;b=Y(Sr(t,2,u));D=Y(Sr(t,0,u));if(C){g=Y(b+Y(Nr(o[t+992>>2]|0,u)));s[k>>2]=g;o[x>>2]=1;m=1}else{m=0;g=Y(E)}if(O){p=Y(D+Y(Nr(o[t+996>>2]|0,a)));s[T>>2]=p;o[A>>2]=1;d=1}else{d=0;p=Y(E)}v=o[e+32>>2]|0;if(!(S&(v|0)==2)){if(wt(g)|0?!(wt(n)|0):0){s[k>>2]=n;o[x>>2]=2;m=2;g=n}}else v=2;if((!((v|0)==2&w)?wt(p)|0:0)?!(wt(i)|0):0){s[T>>2]=i;o[A>>2]=2;d=2;p=i}y=Y(s[t+396>>2]);_=wt(y)|0;do{if(!_){if((m|0)==1&w){s[T>>2]=Y(Y(g-b)/y);o[A>>2]=1;d=1;v=1;break}if(S&(d|0)==1){s[k>>2]=Y(y*Y(p-D));o[x>>2]=1;d=1;v=1}else v=m}else v=m}while(0);N=wt(n)|0;m=(pi(e,t)|0)!=4;if(!(S|C|((r|0)!=1|N)|(m|(v|0)==1))?(s[k>>2]=n,o[x>>2]=1,!_):0){s[T>>2]=Y(Y(n-b)/y);o[A>>2]=1;d=1}if(!(O|w|((l|0)!=1|(wt(i)|0))|(m|(d|0)==1))?(s[T>>2]=i,o[A>>2]=1,!_):0){s[k>>2]=Y(y*Y(i-D));o[x>>2]=1}mi(t,2,u,u,x,k);mi(t,0,a,u,A,T);n=Y(s[k>>2]);i=Y(s[T>>2]);Dr(t,n,i,c,o[x>>2]|0,o[A>>2]|0,u,a,0,3565,f)|0;a=Y(s[t+908+(o[976+(P<<2)>>2]<<2)>>2]);s[t+504>>2]=Y(NT(a,Y(ui(t,P,u))))}}while(0);o[t+500>>2]=o[2278];h=I;return}function di(e,t,n,r,i){e=e|0;t=t|0;n=Y(n);r=Y(r);i=Y(i);r=Y(Di(e,t,n,r));return Y(NT(r,Y(ui(e,t,i))))}function pi(e,t){e=e|0;t=t|0;t=t+20|0;t=o[((o[t>>2]|0)==0?e+16|0:t)>>2]|0;if((t|0)==5?ki(o[e+4>>2]|0)|0:0)t=1;return t|0}function hi(e,t){e=e|0;t=t|0;if(Gr(t)|0?(o[e+96>>2]|0)!=0:0)t=4;else t=o[1040+(t<<2)>>2]|0;return e+60+(t<<3)|0}function vi(e,t){e=e|0;t=t|0;if(Gr(t)|0?(o[e+104>>2]|0)!=0:0)t=5;else t=o[1e3+(t<<2)>>2]|0;return e+60+(t<<3)|0}function mi(e,t,n,r,i,u){e=e|0;t=t|0;n=Y(n);r=Y(r);i=i|0;u=u|0;n=Y(Nr(e+380+(o[976+(t<<2)>>2]<<3)|0,n));n=Y(n+Y(Sr(e,t,r)));switch(o[i>>2]|0){case 2:case 1:{i=wt(n)|0;r=Y(s[u>>2]);s[u>>2]=i|r>2]=2;s[u>>2]=n}break}default:{}}return}function gi(e,t){e=e|0;t=t|0;e=e+132|0;if(Gr(t)|0?(o[(Et(e,4,948)|0)+4>>2]|0)!=0:0)e=1;else e=(o[(Et(e,o[1040+(t<<2)>>2]|0,948)|0)+4>>2]|0)!=0;return e|0}function yi(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0;e=e+132|0;if(Gr(t)|0?(r=Et(e,4,948)|0,(o[r+4>>2]|0)!=0):0)i=4;else{r=Et(e,o[1040+(t<<2)>>2]|0,948)|0;if(!(o[r+4>>2]|0))n=Y(0.0);else i=4}if((i|0)==4)n=Y(Nr(r,n));return Y(n)}function _i(e,t,n){e=e|0;t=t|0;n=Y(n);var r=ft;r=Y(s[e+908+(o[976+(t<<2)>>2]<<2)>>2]);r=Y(r+Y(Vr(e,t,n)));return Y(r+Y(qr(e,t,n)))}function bi(e){e=e|0;var t=0,n=0,r=0;e:do{if(!(ki(o[e+4>>2]|0)|0)){if((o[e+16>>2]|0)!=5){n=Ot(e)|0;if(!n)t=0;else{t=0;while(1){r=Pt(e,t)|0;if((o[r+24>>2]|0)==0?(o[r+20>>2]|0)==5:0){t=1;break e}t=t+1|0;if(t>>>0>=n>>>0){t=0;break}}}}else t=1}else t=0}while(0);return t|0}function wi(e,t){e=e|0;t=t|0;var n=ft;n=Y(s[e+908+(o[976+(t<<2)>>2]<<2)>>2]);return n>=Y(0.0)&((wt(n)|0)^1)|0}function Ei(e){e=e|0;var t=ft,n=0,r=0,i=0,u=0,a=0,l=0,c=ft;n=o[e+968>>2]|0;if(!n){u=Ot(e)|0;do{if(u|0){n=0;i=0;while(1){r=Pt(e,i)|0;if(o[r+940>>2]|0){a=8;break}if((o[r+24>>2]|0)!=1){l=(pi(e,r)|0)==5;if(l){n=r;break}else n=(n|0)==0?r:n}i=i+1|0;if(i>>>0>=u>>>0){a=8;break}}if((a|0)==8)if(!n)break;t=Y(Ei(n));return Y(t+Y(s[n+404>>2]))}}while(0);t=Y(s[e+912>>2])}else{c=Y(s[e+908>>2]);t=Y(s[e+912>>2]);t=Y(pA[n&0](e,c,t));Rt(e,(wt(t)|0)^1,3573)}return Y(t)}function Di(e,t,n,r){e=e|0;t=t|0;n=Y(n);r=Y(r);var i=ft,o=0;if(!(ki(t)|0)){if(Gr(t)|0){t=0;o=3}else{r=Y(E);i=Y(E)}}else{t=1;o=3}if((o|0)==3){i=Y(Nr(e+364+(t<<3)|0,r));r=Y(Nr(e+380+(t<<3)|0,r))}o=r=Y(0.0)&((wt(r)|0)^1));n=o?r:n;o=i>=Y(0.0)&((wt(i)|0)^1)&n>2]|0,u)|0;m=ri(y,u)|0;g=Gr(y)|0;p=Y(Sr(t,2,n));h=Y(Sr(t,0,n));if(!(Ir(t,2,n)|0)){if(gi(t,2)|0?Ai(t,2)|0:0){l=Y(s[e+908>>2]);c=Y(Xr(e,2));c=Y(l-Y(c+Y(Qr(e,2))));l=Y(yi(t,2,n));l=Y(di(t,2,Y(c-Y(l+Y(Oi(t,2,n)))),n,n))}else l=Y(E)}else l=Y(p+Y(Nr(o[t+992>>2]|0,n)));if(!(Ir(t,0,i)|0)){if(gi(t,0)|0?Ai(t,0)|0:0){c=Y(s[e+912>>2]);b=Y(Xr(e,0));b=Y(c-Y(b+Y(Qr(e,0))));c=Y(yi(t,0,i));c=Y(di(t,0,Y(b-Y(c+Y(Oi(t,0,i)))),i,n))}else c=Y(E)}else c=Y(h+Y(Nr(o[t+996>>2]|0,i)));f=wt(l)|0;d=wt(c)|0;do{if(f^d?(v=Y(s[t+396>>2]),!(wt(v)|0)):0)if(f){l=Y(p+Y(Y(c-h)*v));break}else{b=Y(h+Y(Y(l-p)/v));c=d?b:c;break}}while(0);d=wt(l)|0;f=wt(c)|0;if(d|f){w=(d^1)&1;r=n>Y(0.0)&((r|0)!=0&d);l=g?l:r?n:l;Dr(t,l,c,u,g?w:r?2:w,d&(f^1)&1,l,c,0,3623,a)|0;l=Y(s[t+908>>2]);l=Y(l+Y(Sr(t,2,n)));c=Y(s[t+912>>2]);c=Y(c+Y(Sr(t,0,n)))}Dr(t,l,c,u,1,1,l,c,1,3635,a)|0;if(Ai(t,y)|0?!(gi(t,y)|0):0){w=o[976+(y<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(b-Y(s[t+908+(w<<2)>>2]));b=Y(b-Y(Qr(e,y)));b=Y(b-Y(qr(t,y,n)));b=Y(b-Y(Oi(t,y,g?n:i)));s[t+400+(o[1040+(y<<2)>>2]<<2)>>2]=b}else _=21;do{if((_|0)==21){if(!(gi(t,y)|0)?(o[e+8>>2]|0)==1:0){w=o[976+(y<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(Y(b-Y(s[t+908+(w<<2)>>2]))*Y(.5));s[t+400+(o[1040+(y<<2)>>2]<<2)>>2]=b;break}if(!(gi(t,y)|0)?(o[e+8>>2]|0)==2:0){w=o[976+(y<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(b-Y(s[t+908+(w<<2)>>2]));s[t+400+(o[1040+(y<<2)>>2]<<2)>>2]=b}}}while(0);if(Ai(t,m)|0?!(gi(t,m)|0):0){w=o[976+(m<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(b-Y(s[t+908+(w<<2)>>2]));b=Y(b-Y(Qr(e,m)));b=Y(b-Y(qr(t,m,n)));b=Y(b-Y(Oi(t,m,g?i:n)));s[t+400+(o[1040+(m<<2)>>2]<<2)>>2]=b}else _=30;do{if((_|0)==30?!(gi(t,m)|0):0){if((pi(e,t)|0)==2){w=o[976+(m<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(Y(b-Y(s[t+908+(w<<2)>>2]))*Y(.5));s[t+400+(o[1040+(m<<2)>>2]<<2)>>2]=b;break}w=(pi(e,t)|0)==3;if(w^(o[e+28>>2]|0)==2){w=o[976+(m<<2)>>2]|0;b=Y(s[e+908+(w<<2)>>2]);b=Y(b-Y(s[t+908+(w<<2)>>2]));s[t+400+(o[1040+(m<<2)>>2]<<2)>>2]=b}}}while(0);return}function Ci(e,t,n){e=e|0;t=t|0;n=n|0;var r=ft,i=0;i=o[976+(n<<2)>>2]|0;r=Y(s[t+908+(i<<2)>>2]);r=Y(Y(s[e+908+(i<<2)>>2])-r);r=Y(r-Y(s[t+400+(o[1040+(n<<2)>>2]<<2)>>2]));s[t+400+(o[1e3+(n<<2)>>2]<<2)>>2]=r;return}function ki(e){e=e|0;return(e|1|0)==1|0}function Ti(e){e=e|0;var t=ft;switch(o[e+56>>2]|0){case 0:case 3:{t=Y(s[e+40>>2]);if(t>Y(0.0)&((wt(t)|0)^1))e=r[(o[e+976>>2]|0)+2>>0]|0?1056:992;else e=1056;break}default:e=e+52|0}return e|0}function xi(e,t){e=e|0;t=t|0;return(r[e+t>>0]|0)!=0|0}function Ai(e,t){e=e|0;t=t|0;e=e+132|0;if(Gr(t)|0?(o[(Et(e,5,948)|0)+4>>2]|0)!=0:0)e=1;else e=(o[(Et(e,o[1e3+(t<<2)>>2]|0,948)|0)+4>>2]|0)!=0;return e|0}function Oi(e,t,n){e=e|0;t=t|0;n=Y(n);var r=0,i=0;e=e+132|0;if(Gr(t)|0?(r=Et(e,5,948)|0,(o[r+4>>2]|0)!=0):0)i=4;else{r=Et(e,o[1e3+(t<<2)>>2]|0,948)|0;if(!(o[r+4>>2]|0))n=Y(0.0);else i=4}if((i|0)==4)n=Y(Nr(r,n));return Y(n)}function Pi(e,t,n){e=e|0;t=t|0;n=Y(n);if(gi(e,t)|0)n=Y(yi(e,t,n));else n=Y(-Y(Oi(e,t,n)));return Y(n)}function Ii(e){e=Y(e);return(s[d>>2]=e,o[d>>2]|0)|0}function Ni(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>1073741823)Ye();else{i=$T(t<<2)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<2)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<2);return}function Mi(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>2)<<2)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Ri(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-4-t|0)>>>2)<<2);e=o[e>>2]|0;if(e|0)KT(e);return}function Fi(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;a=e+4|0;l=o[a>>2]|0;i=l-r|0;u=i>>2;e=t+(u<<2)|0;if(e>>>0>>0){r=l;do{o[r>>2]=o[e>>2];e=e+4|0;r=(o[a>>2]|0)+4|0;o[a>>2]=r}while(e>>>0>>0)}if(u|0)sx(l+(0-u<<2)|0,t|0,i|0)|0;return}function Li(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0;l=t+4|0;s=o[l>>2]|0;i=o[e>>2]|0;a=n;u=a-i|0;r=s+(0-(u>>2)<<2)|0;o[l>>2]=r;if((u|0)>0)ix(r|0,i|0,u|0)|0;i=e+4|0;u=t+8|0;r=(o[i>>2]|0)-a|0;if((r|0)>0){ix(o[u>>2]|0,n|0,r|0)|0;o[u>>2]=(o[u>>2]|0)+(r>>>2<<2)}a=o[e>>2]|0;o[e>>2]=o[l>>2];o[l>>2]=a;a=o[i>>2]|0;o[i>>2]=o[u>>2];o[u>>2]=a;a=e+8|0;n=t+12|0;e=o[a>>2]|0;o[a>>2]=o[n>>2];o[n>>2]=e;o[t>>2]=o[l>>2];return s|0}function Bi(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;a=o[t>>2]|0;u=o[n>>2]|0;if((a|0)!=(u|0)){i=e+8|0;n=((u+-4-a|0)>>>2)+1|0;e=a;r=o[i>>2]|0;do{o[r>>2]=o[e>>2];r=(o[i>>2]|0)+4|0;o[i>>2]=r;e=e+4|0}while((e|0)!=(u|0));o[t>>2]=a+(n<<2)}return}function ji(){_t();return}function Ui(){var e=0;e=$T(4)|0;zi(e);return e|0}function zi(e){e=e|0;o[e>>2]=Lt()|0;return}function Wi(e){e=e|0;if(e|0){Hi(e);KT(e)}return}function Hi(e){e=e|0;jt(o[e>>2]|0);return}function Vi(e,t,n){e=e|0;t=t|0;n=n|0;jr(o[e>>2]|0,t,n);return}function qi(e,t){e=e|0;t=Y(t);Ar(o[e>>2]|0,t);return}function Gi(e,t){e=e|0;t=t|0;return xi(o[e>>2]|0,t)|0}function $i(){var e=0;e=$T(8)|0;Yi(e,0);return e|0}function Yi(e,t){e=e|0;t=t|0;if(!t)t=Ct()|0;else t=Dt(o[t>>2]|0)|0;o[e>>2]=t;o[e+4>>2]=0;Jt(t,e);return}function Ki(e){e=e|0;var t=0;t=$T(8)|0;Yi(t,e);return t|0}function Xi(e){e=e|0;if(e|0){Qi(e);KT(e)}return}function Qi(e){e=e|0;var t=0;xt(o[e>>2]|0);t=e+4|0;e=o[t>>2]|0;o[t>>2]=0;if(e|0){Ji(e);KT(e)}return}function Ji(e){e=e|0;Zi(e);return}function Zi(e){e=e|0;e=o[e>>2]|0;if(e|0)rt(e|0);return}function eo(e){e=e|0;return Zt(e)|0}function to(e){e=e|0;var t=0,n=0;n=e+4|0;t=o[n>>2]|0;o[n>>2]=0;if(t|0){Ji(t);KT(t)}Mt(o[e>>2]|0);return}function no(e,t){e=e|0;t=t|0;Kt(o[e>>2]|0,o[t>>2]|0);return}function ro(e,t){e=e|0;t=t|0;fn(o[e>>2]|0,t);return}function io(e,t,n){e=e|0;t=t|0;n=+n;Cn(o[e>>2]|0,t,Y(n));return}function oo(e,t,n){e=e|0;t=t|0;n=+n;kn(o[e>>2]|0,t,Y(n));return}function uo(e,t){e=e|0;t=t|0;on(o[e>>2]|0,t);return}function ao(e,t){e=e|0;t=t|0;an(o[e>>2]|0,t);return}function lo(e,t){e=e|0;t=t|0;sn(o[e>>2]|0,t);return}function so(e,t){e=e|0;t=t|0;en(o[e>>2]|0,t);return}function co(e,t){e=e|0;t=t|0;pn(o[e>>2]|0,t);return}function fo(e,t){e=e|0;t=t|0;nn(o[e>>2]|0,t);return}function po(e,t,n){e=e|0;t=t|0;n=+n;xn(o[e>>2]|0,t,Y(n));return}function ho(e,t,n){e=e|0;t=t|0;n=+n;An(o[e>>2]|0,t,Y(n));return}function vo(e,t){e=e|0;t=t|0;Pn(o[e>>2]|0,t);return}function mo(e,t){e=e|0;t=t|0;vn(o[e>>2]|0,t);return}function go(e,t){e=e|0;t=t|0;gn(o[e>>2]|0,t);return}function yo(e,t){e=e|0;t=+t;_n(o[e>>2]|0,Y(t));return}function _o(e,t){e=e|0;t=+t;En(o[e>>2]|0,Y(t));return}function bo(e,t){e=e|0;t=+t;Dn(o[e>>2]|0,Y(t));return}function wo(e,t){e=e|0;t=+t;bn(o[e>>2]|0,Y(t));return}function Eo(e,t){e=e|0;t=+t;wn(o[e>>2]|0,Y(t));return}function Do(e,t){e=e|0;t=+t;Ln(o[e>>2]|0,Y(t));return}function So(e,t){e=e|0;t=+t;Bn(o[e>>2]|0,Y(t));return}function Co(e){e=e|0;jn(o[e>>2]|0);return}function ko(e,t){e=e|0;t=+t;zn(o[e>>2]|0,Y(t));return}function To(e,t){e=e|0;t=+t;Wn(o[e>>2]|0,Y(t));return}function xo(e){e=e|0;Hn(o[e>>2]|0);return}function Ao(e,t){e=e|0;t=+t;qn(o[e>>2]|0,Y(t));return}function Oo(e,t){e=e|0;t=+t;Gn(o[e>>2]|0,Y(t));return}function Po(e,t){e=e|0;t=+t;Yn(o[e>>2]|0,Y(t));return}function Io(e,t){e=e|0;t=+t;Kn(o[e>>2]|0,Y(t));return}function No(e,t){e=e|0;t=+t;Qn(o[e>>2]|0,Y(t));return}function Mo(e,t){e=e|0;t=+t;Jn(o[e>>2]|0,Y(t));return}function Ro(e,t){e=e|0;t=+t;er(o[e>>2]|0,Y(t));return}function Fo(e,t){e=e|0;t=+t;tr(o[e>>2]|0,Y(t));return}function Lo(e,t){e=e|0;t=+t;rr(o[e>>2]|0,Y(t));return}function Bo(e,t,n){e=e|0;t=t|0;n=+n;Rn(o[e>>2]|0,t,Y(n));return}function jo(e,t,n){e=e|0;t=t|0;n=+n;In(o[e>>2]|0,t,Y(n));return}function Uo(e,t,n){e=e|0;t=t|0;n=+n;Nn(o[e>>2]|0,t,Y(n));return}function zo(e){e=e|0;return dn(o[e>>2]|0)|0}function Wo(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;r=h;h=h+16|0;i=r;Tn(i,o[t>>2]|0,n);Ho(e,i);h=r;return}function Ho(e,t){e=e|0;t=t|0;Vo(e,o[t+4>>2]|0,+Y(s[t>>2]));return}function Vo(e,t,n){e=e|0;t=t|0;n=+n;o[e>>2]=t;c[e+8>>3]=n;return}function qo(e){e=e|0;return un(o[e>>2]|0)|0}function Go(e){e=e|0;return ln(o[e>>2]|0)|0}function $o(e){e=e|0;return cn(o[e>>2]|0)|0}function Yo(e){e=e|0;return tn(o[e>>2]|0)|0}function Ko(e){e=e|0;return hn(o[e>>2]|0)|0}function Xo(e){e=e|0;return rn(o[e>>2]|0)|0}function Qo(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;r=h;h=h+16|0;i=r;On(i,o[t>>2]|0,n);Ho(e,i);h=r;return}function Jo(e){e=e|0;return mn(o[e>>2]|0)|0}function Zo(e){e=e|0;return yn(o[e>>2]|0)|0}function eu(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Sn(r,o[t>>2]|0);Ho(e,r);h=n;return}function tu(e){e=e|0;return+ +Y(Xt(o[e>>2]|0))}function nu(e){e=e|0;return+ +Y(Qt(o[e>>2]|0))}function ru(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Un(r,o[t>>2]|0);Ho(e,r);h=n;return}function iu(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Vn(r,o[t>>2]|0);Ho(e,r);h=n;return}function ou(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;$n(r,o[t>>2]|0);Ho(e,r);h=n;return}function uu(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Xn(r,o[t>>2]|0);Ho(e,r);h=n;return}function au(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Zn(r,o[t>>2]|0);Ho(e,r);h=n;return}function lu(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;nr(r,o[t>>2]|0);Ho(e,r);h=n;return}function su(e){e=e|0;return+ +Y(ir(o[e>>2]|0))}function cu(e,t){e=e|0;t=t|0;return+ +Y(Fn(o[e>>2]|0,t))}function fu(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;r=h;h=h+16|0;i=r;Mn(i,o[t>>2]|0,n);Ho(e,i);h=r;return}function du(e,t,n){e=e|0;t=t|0;n=n|0;zt(o[e>>2]|0,o[t>>2]|0,n);return}function pu(e,t){e=e|0;t=t|0;Nt(o[e>>2]|0,o[t>>2]|0);return}function hu(e){e=e|0;return Ot(o[e>>2]|0)|0}function vu(e){e=e|0;e=Gt(o[e>>2]|0)|0;if(!e)e=0;else e=eo(e)|0;return e|0}function mu(e,t){e=e|0;t=t|0;e=Pt(o[e>>2]|0,t)|0;if(!e)e=0;else e=eo(e)|0;return e|0}function gu(e,t){e=e|0;t=t|0;var n=0,r=0;r=$T(4)|0;yu(r,t);n=e+4|0;t=o[n>>2]|0;o[n>>2]=r;if(t|0){Ji(t);KT(t)}Ut(o[e>>2]|0,1);return}function yu(e,t){e=e|0;t=t|0;Bu(e,t);return}function _u(e,t,n,r,i,o){e=e|0;t=t|0;n=Y(n);r=r|0;i=Y(i);o=o|0;var u=0,a=0;u=h;h=h+16|0;a=u;bu(a,Zt(t)|0,+n,r,+i,o);s[e>>2]=Y(+c[a>>3]);s[e+4>>2]=Y(+c[a+8>>3]);h=u;return}function bu(e,t,n,r,i,u){e=e|0;t=t|0;n=+n;r=r|0;i=+i;u=u|0;var a=0,l=0,s=0,f=0,d=0;a=h;h=h+32|0;d=a+8|0;f=a+20|0;s=a;l=a+16|0;c[d>>3]=n;o[f>>2]=r;c[s>>3]=i;o[l>>2]=u;wu(e,o[t+4>>2]|0,d,f,s,l);h=a;return}function wu(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0,l=0;a=h;h=h+16|0;l=a;Dk(l);t=Eu(t)|0;Du(e,t,+c[n>>3],o[r>>2]|0,+c[i>>3],o[u>>2]|0);Ck(l);h=a;return}function Eu(e){e=e|0;return o[e>>2]|0}function Du(e,t,n,r,i,o){e=e|0;t=t|0;n=+n;r=r|0;i=+i;o=o|0;var u=0;u=Cu(Su()|0)|0;n=+ku(n);r=Tu(r)|0;i=+ku(i);xu(e,ot(0,u|0,t|0,+n,r|0,+i,Tu(o)|0)|0);return}function Su(){var e=0;if(!(r[7608]|0)){Ru(9120);e=7608;o[e>>2]=1;o[e+4>>2]=0}return 9120}function Cu(e){e=e|0;return o[e+8>>2]|0}function ku(e){e=+e;return+ +Mu(e)}function Tu(e){e=e|0;return Nu(e)|0}function xu(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+32|0;n=i;r=t;if(!(r&1)){o[e>>2]=o[t>>2];o[e+4>>2]=o[t+4>>2];o[e+8>>2]=o[t+8>>2];o[e+12>>2]=o[t+12>>2]}else{Au(n,0);Be(r|0,n|0)|0;Ou(e,n);Pu(n)}h=i;return}function Au(e,t){e=e|0;t=t|0;Iu(e,t);o[e+8>>2]=0;r[e+24>>0]=0;return}function Ou(e,t){e=e|0;t=t|0;t=t+8|0;o[e>>2]=o[t>>2];o[e+4>>2]=o[t+4>>2];o[e+8>>2]=o[t+8>>2];o[e+12>>2]=o[t+12>>2];return}function Pu(e){e=e|0;r[e+24>>0]=0;return}function Iu(e,t){e=e|0;t=t|0;o[e>>2]=t;return}function Nu(e){e=e|0;return e|0}function Mu(e){e=+e;return+e}function Ru(e){e=e|0;Lu(e,Fu()|0,4);return}function Fu(){return 1064}function Lu(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;o[e+8>>2]=tt(t|0,n+1|0)|0;return}function Bu(e,t){e=e|0;t=t|0;t=o[t>>2]|0;o[e>>2]=t;Ae(t|0);return}function ju(e){e=e|0;var t=0,n=0;n=e+4|0;t=o[n>>2]|0;o[n>>2]=0;if(t|0){Ji(t);KT(t)}Ut(o[e>>2]|0,0);return}function Uu(e){e=e|0;$t(o[e>>2]|0);return}function zu(e){e=e|0;return Yt(o[e>>2]|0)|0}function Wu(e,t,n,r){e=e|0;t=+t;n=+n;r=r|0;Or(o[e>>2]|0,Y(t),Y(n),r);return}function Hu(e){e=e|0;return+ +Y(or(o[e>>2]|0))}function Vu(e){e=e|0;return+ +Y(ar(o[e>>2]|0))}function qu(e){e=e|0;return+ +Y(ur(o[e>>2]|0))}function Gu(e){e=e|0;return+ +Y(lr(o[e>>2]|0))}function $u(e){e=e|0;return+ +Y(sr(o[e>>2]|0))}function Yu(e){e=e|0;return+ +Y(cr(o[e>>2]|0))}function Ku(e,t){e=e|0;t=t|0;c[e>>3]=+Y(or(o[t>>2]|0));c[e+8>>3]=+Y(ar(o[t>>2]|0));c[e+16>>3]=+Y(ur(o[t>>2]|0));c[e+24>>3]=+Y(lr(o[t>>2]|0));c[e+32>>3]=+Y(sr(o[t>>2]|0));c[e+40>>3]=+Y(cr(o[t>>2]|0));return}function Xu(e,t){e=e|0;t=t|0;return+ +Y(fr(o[e>>2]|0,t))}function Qu(e,t){e=e|0;t=t|0;return+ +Y(dr(o[e>>2]|0,t))}function Ju(e,t){e=e|0;t=t|0;return+ +Y(pr(o[e>>2]|0,t))}function Zu(){return Ft()|0}function ea(){ta();na();ra();ia();oa();ua();return}function ta(){zb(11713,4938,1);return}function na(){tb(10448);return}function ra(){R_(10408);return}function ia(){Jy(10324);return}function oa(){qm(10096);return}function ua(){aa(9132);return}function aa(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0,b=0,w=0,E=0,D=0,S=0,C=0,k=0,T=0,x=0,A=0,O=0,P=0,I=0,N=0,M=0,R=0,F=0,L=0,B=0,j=0,U=0,z=0,W=0,H=0,V=0,q=0,G=0,$=0,Y=0,K=0,X=0,Q=0,J=0,Z=0,ee=0,te=0,ne=0,re=0,ie=0,oe=0,ue=0,ae=0,le=0,se=0,ce=0,fe=0,de=0,pe=0,he=0,ve=0,me=0,ge=0,ye=0,_e=0,be=0,we=0,Ee=0,De=0,Se=0,Ce=0,ke=0,Te=0,xe=0,Ae=0,Oe=0,Pe=0,Ie=0;t=h;h=h+672|0;n=t+656|0;Ie=t+648|0;Pe=t+640|0;Oe=t+632|0;Ae=t+624|0;xe=t+616|0;Te=t+608|0;ke=t+600|0;Ce=t+592|0;Se=t+584|0;De=t+576|0;Ee=t+568|0;we=t+560|0;be=t+552|0;_e=t+544|0;ye=t+536|0;ge=t+528|0;me=t+520|0;ve=t+512|0;he=t+504|0;pe=t+496|0;de=t+488|0;fe=t+480|0;ce=t+472|0;se=t+464|0;le=t+456|0;ae=t+448|0;ue=t+440|0;oe=t+432|0;ie=t+424|0;re=t+416|0;ne=t+408|0;te=t+400|0;ee=t+392|0;Z=t+384|0;J=t+376|0;Q=t+368|0;X=t+360|0;K=t+352|0;Y=t+344|0;$=t+336|0;G=t+328|0;q=t+320|0;V=t+312|0;H=t+304|0;W=t+296|0;z=t+288|0;U=t+280|0;j=t+272|0;B=t+264|0;L=t+256|0;F=t+248|0;R=t+240|0;M=t+232|0;N=t+224|0;I=t+216|0;P=t+208|0;O=t+200|0;A=t+192|0;x=t+184|0;T=t+176|0;k=t+168|0;C=t+160|0;S=t+152|0;D=t+144|0;E=t+136|0;w=t+128|0;b=t+120|0;_=t+112|0;y=t+104|0;g=t+96|0;m=t+88|0;v=t+80|0;p=t+72|0;d=t+64|0;f=t+56|0;c=t+48|0;s=t+40|0;l=t+32|0;a=t+24|0;u=t+16|0;i=t+8|0;r=t;la(e,3646);sa(e,3651,2)|0;ca(e,3665,2)|0;fa(e,3682,18)|0;o[Ie>>2]=19;o[Ie+4>>2]=0;o[n>>2]=o[Ie>>2];o[n+4>>2]=o[Ie+4>>2];da(e,3690,n)|0;o[Pe>>2]=1;o[Pe+4>>2]=0;o[n>>2]=o[Pe>>2];o[n+4>>2]=o[Pe+4>>2];pa(e,3696,n)|0;o[Oe>>2]=2;o[Oe+4>>2]=0;o[n>>2]=o[Oe>>2];o[n+4>>2]=o[Oe+4>>2];ha(e,3706,n)|0;o[Ae>>2]=1;o[Ae+4>>2]=0;o[n>>2]=o[Ae>>2];o[n+4>>2]=o[Ae+4>>2];va(e,3722,n)|0;o[xe>>2]=2;o[xe+4>>2]=0;o[n>>2]=o[xe>>2];o[n+4>>2]=o[xe+4>>2];va(e,3734,n)|0;o[Te>>2]=3;o[Te+4>>2]=0;o[n>>2]=o[Te>>2];o[n+4>>2]=o[Te+4>>2];ha(e,3753,n)|0;o[ke>>2]=4;o[ke+4>>2]=0;o[n>>2]=o[ke>>2];o[n+4>>2]=o[ke+4>>2];ha(e,3769,n)|0;o[Ce>>2]=5;o[Ce+4>>2]=0;o[n>>2]=o[Ce>>2];o[n+4>>2]=o[Ce+4>>2];ha(e,3783,n)|0;o[Se>>2]=6;o[Se+4>>2]=0;o[n>>2]=o[Se>>2];o[n+4>>2]=o[Se+4>>2];ha(e,3796,n)|0;o[De>>2]=7;o[De+4>>2]=0;o[n>>2]=o[De>>2];o[n+4>>2]=o[De+4>>2];ha(e,3813,n)|0;o[Ee>>2]=8;o[Ee+4>>2]=0;o[n>>2]=o[Ee>>2];o[n+4>>2]=o[Ee+4>>2];ha(e,3825,n)|0;o[we>>2]=3;o[we+4>>2]=0;o[n>>2]=o[we>>2];o[n+4>>2]=o[we+4>>2];va(e,3843,n)|0;o[be>>2]=4;o[be+4>>2]=0;o[n>>2]=o[be>>2];o[n+4>>2]=o[be+4>>2];va(e,3853,n)|0;o[_e>>2]=9;o[_e+4>>2]=0;o[n>>2]=o[_e>>2];o[n+4>>2]=o[_e+4>>2];ha(e,3870,n)|0;o[ye>>2]=10;o[ye+4>>2]=0;o[n>>2]=o[ye>>2];o[n+4>>2]=o[ye+4>>2];ha(e,3884,n)|0;o[ge>>2]=11;o[ge+4>>2]=0;o[n>>2]=o[ge>>2];o[n+4>>2]=o[ge+4>>2];ha(e,3896,n)|0;o[me>>2]=1;o[me+4>>2]=0;o[n>>2]=o[me>>2];o[n+4>>2]=o[me+4>>2];ma(e,3907,n)|0;o[ve>>2]=2;o[ve+4>>2]=0;o[n>>2]=o[ve>>2];o[n+4>>2]=o[ve+4>>2];ma(e,3915,n)|0;o[he>>2]=3;o[he+4>>2]=0;o[n>>2]=o[he>>2];o[n+4>>2]=o[he+4>>2];ma(e,3928,n)|0;o[pe>>2]=4;o[pe+4>>2]=0;o[n>>2]=o[pe>>2];o[n+4>>2]=o[pe+4>>2];ma(e,3948,n)|0;o[de>>2]=5;o[de+4>>2]=0;o[n>>2]=o[de>>2];o[n+4>>2]=o[de+4>>2];ma(e,3960,n)|0;o[fe>>2]=6;o[fe+4>>2]=0;o[n>>2]=o[fe>>2];o[n+4>>2]=o[fe+4>>2];ma(e,3974,n)|0;o[ce>>2]=7;o[ce+4>>2]=0;o[n>>2]=o[ce>>2];o[n+4>>2]=o[ce+4>>2];ma(e,3983,n)|0;o[se>>2]=20;o[se+4>>2]=0;o[n>>2]=o[se>>2];o[n+4>>2]=o[se+4>>2];da(e,3999,n)|0;o[le>>2]=8;o[le+4>>2]=0;o[n>>2]=o[le>>2];o[n+4>>2]=o[le+4>>2];ma(e,4012,n)|0;o[ae>>2]=9;o[ae+4>>2]=0;o[n>>2]=o[ae>>2];o[n+4>>2]=o[ae+4>>2];ma(e,4022,n)|0;o[ue>>2]=21;o[ue+4>>2]=0;o[n>>2]=o[ue>>2];o[n+4>>2]=o[ue+4>>2];da(e,4039,n)|0;o[oe>>2]=10;o[oe+4>>2]=0;o[n>>2]=o[oe>>2];o[n+4>>2]=o[oe+4>>2];ma(e,4053,n)|0;o[ie>>2]=11;o[ie+4>>2]=0;o[n>>2]=o[ie>>2];o[n+4>>2]=o[ie+4>>2];ma(e,4065,n)|0;o[re>>2]=12;o[re+4>>2]=0;o[n>>2]=o[re>>2];o[n+4>>2]=o[re+4>>2];ma(e,4084,n)|0;o[ne>>2]=13;o[ne+4>>2]=0;o[n>>2]=o[ne>>2];o[n+4>>2]=o[ne+4>>2];ma(e,4097,n)|0;o[te>>2]=14;o[te+4>>2]=0;o[n>>2]=o[te>>2];o[n+4>>2]=o[te+4>>2];ma(e,4117,n)|0;o[ee>>2]=15;o[ee+4>>2]=0;o[n>>2]=o[ee>>2];o[n+4>>2]=o[ee+4>>2];ma(e,4129,n)|0;o[Z>>2]=16;o[Z+4>>2]=0;o[n>>2]=o[Z>>2];o[n+4>>2]=o[Z+4>>2];ma(e,4148,n)|0;o[J>>2]=17;o[J+4>>2]=0;o[n>>2]=o[J>>2];o[n+4>>2]=o[J+4>>2];ma(e,4161,n)|0;o[Q>>2]=18;o[Q+4>>2]=0;o[n>>2]=o[Q>>2];o[n+4>>2]=o[Q+4>>2];ma(e,4181,n)|0;o[X>>2]=5;o[X+4>>2]=0;o[n>>2]=o[X>>2];o[n+4>>2]=o[X+4>>2];va(e,4196,n)|0;o[K>>2]=6;o[K+4>>2]=0;o[n>>2]=o[K>>2];o[n+4>>2]=o[K+4>>2];va(e,4206,n)|0;o[Y>>2]=7;o[Y+4>>2]=0;o[n>>2]=o[Y>>2];o[n+4>>2]=o[Y+4>>2];va(e,4217,n)|0;o[$>>2]=3;o[$+4>>2]=0;o[n>>2]=o[$>>2];o[n+4>>2]=o[$+4>>2];ga(e,4235,n)|0;o[G>>2]=1;o[G+4>>2]=0;o[n>>2]=o[G>>2];o[n+4>>2]=o[G+4>>2];ya(e,4251,n)|0;o[q>>2]=4;o[q+4>>2]=0;o[n>>2]=o[q>>2];o[n+4>>2]=o[q+4>>2];ga(e,4263,n)|0;o[V>>2]=5;o[V+4>>2]=0;o[n>>2]=o[V>>2];o[n+4>>2]=o[V+4>>2];ga(e,4279,n)|0;o[H>>2]=6;o[H+4>>2]=0;o[n>>2]=o[H>>2];o[n+4>>2]=o[H+4>>2];ga(e,4293,n)|0;o[W>>2]=7;o[W+4>>2]=0;o[n>>2]=o[W>>2];o[n+4>>2]=o[W+4>>2];ga(e,4306,n)|0;o[z>>2]=8;o[z+4>>2]=0;o[n>>2]=o[z>>2];o[n+4>>2]=o[z+4>>2];ga(e,4323,n)|0;o[U>>2]=9;o[U+4>>2]=0;o[n>>2]=o[U>>2];o[n+4>>2]=o[U+4>>2];ga(e,4335,n)|0;o[j>>2]=2;o[j+4>>2]=0;o[n>>2]=o[j>>2];o[n+4>>2]=o[j+4>>2];ya(e,4353,n)|0;o[B>>2]=12;o[B+4>>2]=0;o[n>>2]=o[B>>2];o[n+4>>2]=o[B+4>>2];_a(e,4363,n)|0;o[L>>2]=1;o[L+4>>2]=0;o[n>>2]=o[L>>2];o[n+4>>2]=o[L+4>>2];ba(e,4376,n)|0;o[F>>2]=2;o[F+4>>2]=0;o[n>>2]=o[F>>2];o[n+4>>2]=o[F+4>>2];ba(e,4388,n)|0;o[R>>2]=13;o[R+4>>2]=0;o[n>>2]=o[R>>2];o[n+4>>2]=o[R+4>>2];_a(e,4402,n)|0;o[M>>2]=14;o[M+4>>2]=0;o[n>>2]=o[M>>2];o[n+4>>2]=o[M+4>>2];_a(e,4411,n)|0;o[N>>2]=15;o[N+4>>2]=0;o[n>>2]=o[N>>2];o[n+4>>2]=o[N+4>>2];_a(e,4421,n)|0;o[I>>2]=16;o[I+4>>2]=0;o[n>>2]=o[I>>2];o[n+4>>2]=o[I+4>>2];_a(e,4433,n)|0;o[P>>2]=17;o[P+4>>2]=0;o[n>>2]=o[P>>2];o[n+4>>2]=o[P+4>>2];_a(e,4446,n)|0;o[O>>2]=18;o[O+4>>2]=0;o[n>>2]=o[O>>2];o[n+4>>2]=o[O+4>>2];_a(e,4458,n)|0;o[A>>2]=3;o[A+4>>2]=0;o[n>>2]=o[A>>2];o[n+4>>2]=o[A+4>>2];ba(e,4471,n)|0;o[x>>2]=1;o[x+4>>2]=0;o[n>>2]=o[x>>2];o[n+4>>2]=o[x+4>>2];wa(e,4486,n)|0;o[T>>2]=10;o[T+4>>2]=0;o[n>>2]=o[T>>2];o[n+4>>2]=o[T+4>>2];ga(e,4496,n)|0;o[k>>2]=11;o[k+4>>2]=0;o[n>>2]=o[k>>2];o[n+4>>2]=o[k+4>>2];ga(e,4508,n)|0;o[C>>2]=3;o[C+4>>2]=0;o[n>>2]=o[C>>2];o[n+4>>2]=o[C+4>>2];ya(e,4519,n)|0;o[S>>2]=4;o[S+4>>2]=0;o[n>>2]=o[S>>2];o[n+4>>2]=o[S+4>>2];Ea(e,4530,n)|0;o[D>>2]=19;o[D+4>>2]=0;o[n>>2]=o[D>>2];o[n+4>>2]=o[D+4>>2];Da(e,4542,n)|0;o[E>>2]=12;o[E+4>>2]=0;o[n>>2]=o[E>>2];o[n+4>>2]=o[E+4>>2];Sa(e,4554,n)|0;o[w>>2]=13;o[w+4>>2]=0;o[n>>2]=o[w>>2];o[n+4>>2]=o[w+4>>2];Ca(e,4568,n)|0;o[b>>2]=2;o[b+4>>2]=0;o[n>>2]=o[b>>2];o[n+4>>2]=o[b+4>>2];ka(e,4578,n)|0;o[_>>2]=20;o[_+4>>2]=0;o[n>>2]=o[_>>2];o[n+4>>2]=o[_+4>>2];Ta(e,4587,n)|0;o[y>>2]=22;o[y+4>>2]=0;o[n>>2]=o[y>>2];o[n+4>>2]=o[y+4>>2];da(e,4602,n)|0;o[g>>2]=23;o[g+4>>2]=0;o[n>>2]=o[g>>2];o[n+4>>2]=o[g+4>>2];da(e,4619,n)|0;o[m>>2]=14;o[m+4>>2]=0;o[n>>2]=o[m>>2];o[n+4>>2]=o[m+4>>2];xa(e,4629,n)|0;o[v>>2]=1;o[v+4>>2]=0;o[n>>2]=o[v>>2];o[n+4>>2]=o[v+4>>2];Aa(e,4637,n)|0;o[p>>2]=4;o[p+4>>2]=0;o[n>>2]=o[p>>2];o[n+4>>2]=o[p+4>>2];ba(e,4653,n)|0;o[d>>2]=5;o[d+4>>2]=0;o[n>>2]=o[d>>2];o[n+4>>2]=o[d+4>>2];ba(e,4669,n)|0;o[f>>2]=6;o[f+4>>2]=0;o[n>>2]=o[f>>2];o[n+4>>2]=o[f+4>>2];ba(e,4686,n)|0;o[c>>2]=7;o[c+4>>2]=0;o[n>>2]=o[c>>2];o[n+4>>2]=o[c+4>>2];ba(e,4701,n)|0;o[s>>2]=8;o[s+4>>2]=0;o[n>>2]=o[s>>2];o[n+4>>2]=o[s+4>>2];ba(e,4719,n)|0;o[l>>2]=9;o[l+4>>2]=0;o[n>>2]=o[l>>2];o[n+4>>2]=o[l+4>>2];ba(e,4736,n)|0;o[a>>2]=21;o[a+4>>2]=0;o[n>>2]=o[a>>2];o[n+4>>2]=o[a+4>>2];Oa(e,4754,n)|0;o[u>>2]=2;o[u+4>>2]=0;o[n>>2]=o[u>>2];o[n+4>>2]=o[u+4>>2];wa(e,4772,n)|0;o[i>>2]=3;o[i+4>>2]=0;o[n>>2]=o[i>>2];o[n+4>>2]=o[i+4>>2];wa(e,4790,n)|0;o[r>>2]=4;o[r+4>>2]=0;o[n>>2]=o[r>>2];o[n+4>>2]=o[r+4>>2];wa(e,4808,n)|0;h=t;return}function la(e,t){e=e|0;t=t|0;var n=0;n=Mm()|0;o[e>>2]=n;Rm(n,t);cw(o[e>>2]|0);return}function sa(e,t,n){e=e|0;t=t|0;n=n|0;gm(e,Ia(t)|0,n,0);return e|0}function ca(e,t,n){e=e|0;t=t|0;n=n|0;Xv(e,Ia(t)|0,n,0);return e|0}function fa(e,t,n){e=e|0;t=t|0;n=n|0;Nv(e,Ia(t)|0,n,0);return e|0}function da(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];hv(e,t,i);h=r;return e|0}function pa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Gh(e,t,i);h=r;return e|0}function ha(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Th(e,t,i);h=r;return e|0}function va(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];lh(e,t,i);h=r;return e|0}function ma(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Hp(e,t,i);h=r;return e|0}function ga(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Sp(e,t,i);h=r;return e|0}function ya(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];op(e,t,i);h=r;return e|0}function _a(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Cd(e,t,i);h=r;return e|0}function ba(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ud(e,t,i);h=r;return e|0}function wa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];zf(e,t,i);h=r;return e|0}function Ea(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Ef(e,t,i);h=r;return e|0}function Da(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Zc(e,t,i);h=r;return e|0}function Sa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Nc(e,t,i);h=r;return e|0}function Ca(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];hc(e,t,i);h=r;return e|0}function ka(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];qs(e,t,i);h=r;return e|0}function Ta(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ws(e,t,i);h=r;return e|0}function xa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ts(e,t,i);h=r;return e|0}function Aa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Ol(e,t,i);h=r;return e|0}function Oa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Pa(e,t,i);h=r;return e|0}function Pa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Na(e,n,i,1);h=r;return}function Ia(e){e=e|0;return e|0}function Na(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Ma()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Ra(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Fa(u,r)|0,r);h=i;return}function Ma(){var e=0,t=0;if(!(r[7616]|0)){Ya(9136);Fe(24,9136,g|0)|0;t=7616;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9136)|0)){e=9136;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Ya(9136)}return 9136}function Ra(e){e=e|0;return 0}function Fa(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Ma()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Wa(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Ha(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function La(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0;a=h;h=h+32|0;p=a+24|0;d=a+20|0;s=a+16|0;f=a+12|0;c=a+8|0;l=a+4|0;v=a;o[d>>2]=t;o[s>>2]=n;o[f>>2]=r;o[c>>2]=i;o[l>>2]=u;u=e+28|0;o[v>>2]=o[u>>2];o[p>>2]=o[v>>2];Ba(e+24|0,p,d,f,c,s,l)|0;o[u>>2]=o[o[u>>2]>>2];h=a;return}function Ba(e,t,n,r,i,u,a){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;a=a|0;e=ja(t)|0;t=$T(24)|0;Ua(t+4|0,o[n>>2]|0,o[r>>2]|0,o[i>>2]|0,o[u>>2]|0,o[a>>2]|0);o[t>>2]=o[e>>2];o[e>>2]=t;return t|0}function ja(e){e=e|0;return o[e>>2]|0}function Ua(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;o[e>>2]=t;o[e+4>>2]=n;o[e+8>>2]=r;o[e+12>>2]=i;o[e+16>>2]=u;return}function za(e,t){e=e|0;t=t|0;return t|e|0}function Wa(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Ha(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Va(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;qa(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Wa(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Ga(e,l);$a(l);h=c;return}}function Va(e){e=e|0;return 357913941}function qa(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Ga(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function $a(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Ya(e){e=e|0;Ja(e);return}function Ka(e){e=e|0;Qa(e+24|0);return}function Xa(e){e=e|0;return o[e>>2]|0}function Qa(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Ja(e){e=e|0;var t=0;t=Za()|0;nl(e,2,3,t,el()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Za(){return 9228}function el(){return 1140}function tl(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=rl(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=il(t,r)|0;h=n;return t|0}function nl(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;o[e>>2]=t;o[e+4>>2]=n;o[e+8>>2]=r;o[e+12>>2]=i;o[e+16>>2]=u;return}function rl(e){e=e|0;return(o[(Ma()|0)+24>>2]|0)+(e*12|0)|0}function il(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+48|0;r=i;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;vA[n&31](r,e);r=ol(r)|0;h=i;return r|0}function ol(e){e=e|0;var t=0,n=0,r=0,i=0;i=h;h=h+32|0;t=i+12|0;n=i;r=al(ul()|0)|0;if(!r)e=dl(e)|0;else{ll(t,r);sl(n,t);cl(e,n);e=fl(t)|0}h=i;return e|0}function ul(){var e=0;if(!(r[7632]|0)){Dl(9184);Fe(25,9184,g|0)|0;e=7632;o[e>>2]=1;o[e+4>>2]=0}return 9184}function al(e){e=e|0;return o[e+36>>2]|0}function ll(e,t){e=e|0;t=t|0;o[e>>2]=t;o[e+4>>2]=e;o[e+8>>2]=0;return}function sl(e,t){e=e|0;t=t|0;o[e>>2]=o[t>>2];o[e+4>>2]=o[t+4>>2];o[e+8>>2]=0;return}function cl(e,t){e=e|0;t=t|0;gl(t,e,e+8|0,e+16|0,e+24|0,e+32|0,e+40|0)|0;return}function fl(e){e=e|0;return o[(o[e+4>>2]|0)+8>>2]|0}function dl(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0;s=h;h=h+16|0;n=s+4|0;r=s;i=UD(8)|0;u=i;a=$T(48)|0;l=a;t=l+48|0;do{o[l>>2]=o[e>>2];l=l+4|0;e=e+4|0}while((l|0)<(t|0));t=u+4|0;o[t>>2]=a;l=$T(8)|0;a=o[t>>2]|0;o[r>>2]=0;o[n>>2]=o[r>>2];pl(l,a,n);o[i>>2]=l;h=s;return u|0}function pl(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1092;o[n+12>>2]=t;o[e+4>>2]=n;return}function hl(e){e=e|0;zT(e);KT(e);return}function vl(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function ml(e){e=e|0;KT(e);return}function gl(e,t,n,r,i,u,a){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;a=a|0;u=yl(o[e>>2]|0,t,n,r,i,u,a)|0;a=e+4|0;o[(o[a>>2]|0)+8>>2]=u;return o[(o[a>>2]|0)+8>>2]|0}function yl(e,t,n,r,i,o,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;u=u|0;var a=0,l=0;a=h;h=h+16|0;l=a;Dk(l);e=Eu(e)|0;u=_l(e,+c[t>>3],+c[n>>3],+c[r>>3],+c[i>>3],+c[o>>3],+c[u>>3])|0;Ck(l);h=a;return u|0}function _l(e,t,n,r,i,o,u){e=e|0;t=+t;n=+n;r=+r;i=+i;o=+o;u=+u;var a=0;a=Cu(bl()|0)|0;t=+ku(t);n=+ku(n);r=+ku(r);i=+ku(i);o=+ku(o);return Te(0,a|0,e|0,+t,+n,+r,+i,+o,+ +ku(u))|0}function bl(){var e=0;if(!(r[7624]|0)){wl(9172);e=7624;o[e>>2]=1;o[e+4>>2]=0}return 9172}function wl(e){e=e|0;Lu(e,El()|0,6);return}function El(){return 1112}function Dl(e){e=e|0;Al(e);return}function Sl(e){e=e|0;Cl(e+24|0);kl(e+16|0);return}function Cl(e){e=e|0;xl(e);return}function kl(e){e=e|0;Tl(e);return}function Tl(e){e=e|0;var t=0,n=0;t=o[e>>2]|0;if(t|0)do{n=t;t=o[t>>2]|0;KT(n)}while((t|0)!=0);o[e>>2]=0;return}function xl(e){e=e|0;var t=0,n=0;t=o[e>>2]|0;if(t|0)do{n=t;t=o[t>>2]|0;KT(n)}while((t|0)!=0);o[e>>2]=0;return}function Al(e){e=e|0;var t=0;o[e+16>>2]=0;o[e+20>>2]=0;t=e+24|0;o[t>>2]=0;o[e+28>>2]=t;o[e+36>>2]=0;r[e+40>>0]=0;r[e+41>>0]=0;return}function Ol(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Pl(e,n,i,0);h=r;return}function Pl(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Il()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Nl(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Ml(u,r)|0,r);h=i;return}function Il(){var e=0,t=0;if(!(r[7640]|0)){zl(9232);Fe(26,9232,g|0)|0;t=7640;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9232)|0)){e=9232;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));zl(9232)}return 9232}function Nl(e){e=e|0;return 0}function Ml(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Il()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Rl(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Fl(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Rl(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Fl(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Ll(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Bl(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Rl(u,r,n);o[s>>2]=(o[s>>2]|0)+12;jl(e,l);Ul(l);h=c;return}}function Ll(e){e=e|0;return 357913941}function Bl(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function jl(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Ul(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function zl(e){e=e|0;Vl(e);return}function Wl(e){e=e|0;Hl(e+24|0);return}function Hl(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Vl(e){e=e|0;var t=0;t=Za()|0;nl(e,2,1,t,ql()|0,3);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ql(){return 1144}function Gl(e,t,n,r,i){e=e|0;t=t|0;n=+n;r=+r;i=i|0;var u=0,a=0,l=0,s=0;u=h;h=h+16|0;a=u+8|0;l=u;s=$l(e)|0;e=o[s+4>>2]|0;o[l>>2]=o[s>>2];o[l+4>>2]=e;o[a>>2]=o[l>>2];o[a+4>>2]=o[l+4>>2];Yl(t,a,n,r,i);h=u;return}function $l(e){e=e|0;return(o[(Il()|0)+24>>2]|0)+(e*12|0)|0}function Yl(e,t,n,r,i){e=e|0;t=t|0;n=+n;r=+r;i=i|0;var u=0,a=0,l=0,s=0,c=0;c=h;h=h+16|0;a=c+2|0;l=c+1|0;s=c;u=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)u=o[(o[e>>2]|0)+u>>2]|0;Kl(a,n);n=+Xl(a,n);Kl(l,r);r=+Xl(l,r);Ql(s,i);s=Jl(s,i)|0;gA[u&1](e,n,r,s);h=c;return}function Kl(e,t){e=e|0;t=+t;return}function Xl(e,t){e=e|0;t=+t;return+ +es(t)}function Ql(e,t){e=e|0;t=t|0;return}function Jl(e,t){e=e|0;t=t|0;return Zl(t)|0}function Zl(e){e=e|0;return e|0}function es(e){e=+e;return+e}function ts(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ns(e,n,i,1);h=r;return}function ns(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=rs()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=is(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,os(u,r)|0,r);h=i;return}function rs(){var e=0,t=0;if(!(r[7648]|0)){ds(9268);Fe(27,9268,g|0)|0;t=7648;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9268)|0)){e=9268;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));ds(9268)}return 9268}function is(e){e=e|0;return 0}function os(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=rs()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];us(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{as(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function us(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function as(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=ls(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;ss(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];us(u,r,n);o[s>>2]=(o[s>>2]|0)+12;cs(e,l);fs(l);h=c;return}}function ls(e){e=e|0;return 357913941}function ss(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function cs(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function fs(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function ds(e){e=e|0;vs(e);return}function ps(e){e=e|0;hs(e+24|0);return}function hs(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function vs(e){e=e|0;var t=0;t=Za()|0;nl(e,2,4,t,ms()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ms(){return 1160}function gs(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=ys(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=_s(t,r)|0;h=n;return t|0}function ys(e){e=e|0;return(o[(rs()|0)+24>>2]|0)+(e*12|0)|0}function _s(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return bs(mA[n&31](e)|0)|0}function bs(e){e=e|0;return e&1|0}function ws(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Es(e,n,i,0);h=r;return}function Es(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Ds()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Ss(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Cs(u,r)|0,r);h=i;return}function Ds(){var e=0,t=0;if(!(r[7656]|0)){Is(9304);Fe(28,9304,g|0)|0;t=7656;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9304)|0)){e=9304;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Is(9304)}return 9304}function Ss(e){e=e|0;return 0}function Cs(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Ds()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];ks(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Ts(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function ks(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Ts(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=xs(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;As(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];ks(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Os(e,l);Ps(l);h=c;return}}function xs(e){e=e|0;return 357913941}function As(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Os(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Ps(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Is(e){e=e|0;Rs(e);return}function Ns(e){e=e|0;Ms(e+24|0);return}function Ms(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Rs(e){e=e|0;var t=0;t=Za()|0;nl(e,2,5,t,Fs()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Fs(){return 1164}function Ls(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Bs(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];js(t,i,n);h=r;return}function Bs(e){e=e|0;return(o[(Ds()|0)+24>>2]|0)+(e*12|0)|0}function js(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Us(i,n);n=zs(i,n)|0;vA[r&31](e,n);Ws(i);h=u;return}function Us(e,t){e=e|0;t=t|0;Hs(e,t);return}function zs(e,t){e=e|0;t=t|0;return e|0}function Ws(e){e=e|0;Ji(e);return}function Hs(e,t){e=e|0;t=t|0;Vs(e,t);return}function Vs(e,t){e=e|0;t=t|0;o[e>>2]=t;return}function qs(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Gs(e,n,i,0);h=r;return}function Gs(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=$s()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Ys(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Ks(u,r)|0,r);h=i;return}function $s(){var e=0,t=0;if(!(r[7664]|0)){nc(9340);Fe(29,9340,g|0)|0;t=7664;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9340)|0)){e=9340;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));nc(9340)}return 9340}function Ys(e){e=e|0;return 0}function Ks(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=$s()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Xs(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Qs(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Xs(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Qs(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Js(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Zs(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Xs(u,r,n);o[s>>2]=(o[s>>2]|0)+12;ec(e,l);tc(l);h=c;return}}function Js(e){e=e|0;return 357913941}function Zs(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function ec(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function tc(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function nc(e){e=e|0;oc(e);return}function rc(e){e=e|0;ic(e+24|0);return}function ic(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function oc(e){e=e|0;var t=0;t=Za()|0;nl(e,2,4,t,uc()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function uc(){return 1180}function ac(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=lc(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];n=sc(t,i,n)|0;h=r;return n|0}function lc(e){e=e|0;return(o[($s()|0)+24>>2]|0)+(e*12|0)|0}function sc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;cc(i,n);i=fc(i,n)|0;i=dc(DA[r&15](e,i)|0)|0;h=u;return i|0}function cc(e,t){e=e|0;t=t|0;return}function fc(e,t){e=e|0;t=t|0;return pc(t)|0}function dc(e){e=e|0;return e|0}function pc(e){e=e|0;return e|0}function hc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];vc(e,n,i,0);h=r;return}function vc(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=mc()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=gc(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,yc(u,r)|0,r);h=i;return}function mc(){var e=0,t=0;if(!(r[7672]|0)){Cc(9376);Fe(30,9376,g|0)|0;t=7672;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9376)|0)){e=9376;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Cc(9376)}return 9376}function gc(e){e=e|0;return 0}function yc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=mc()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];_c(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{bc(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function _c(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function bc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=wc(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Ec(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];_c(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Dc(e,l);Sc(l);h=c;return}}function wc(e){e=e|0;return 357913941}function Ec(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Dc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Sc(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Cc(e){e=e|0;xc(e);return}function kc(e){e=e|0;Tc(e+24|0);return}function Tc(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function xc(e){e=e|0;var t=0;t=Za()|0;nl(e,2,5,t,Ac()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Ac(){return 1196}function Oc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=Pc(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=Ic(t,r)|0;h=n;return t|0}function Pc(e){e=e|0;return(o[(mc()|0)+24>>2]|0)+(e*12|0)|0}function Ic(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return dc(mA[n&31](e)|0)|0}function Nc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Mc(e,n,i,1);h=r;return}function Mc(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Rc()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Fc(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Lc(u,r)|0,r);h=i;return}function Rc(){var e=0,t=0;if(!(r[7680]|0)){Vc(9412);Fe(31,9412,g|0)|0;t=7680;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9412)|0)){e=9412;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Vc(9412)}return 9412}function Fc(e){e=e|0;return 0}function Lc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Rc()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Bc(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{jc(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Bc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function jc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Uc(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;zc(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Bc(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Wc(e,l);Hc(l);h=c;return}}function Uc(e){e=e|0;return 357913941}function zc(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Wc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Hc(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Vc(e){e=e|0;$c(e);return}function qc(e){e=e|0;Gc(e+24|0);return}function Gc(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function $c(e){e=e|0;var t=0;t=Za()|0;nl(e,2,6,t,Yc()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Yc(){return 1200}function Kc(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=Xc(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=Qc(t,r)|0;h=n;return t|0}function Xc(e){e=e|0;return(o[(Rc()|0)+24>>2]|0)+(e*12|0)|0}function Qc(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return Jc(mA[n&31](e)|0)|0}function Jc(e){e=e|0;return e|0}function Zc(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ef(e,n,i,0);h=r;return}function ef(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=tf()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=nf(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,rf(u,r)|0,r);h=i;return}function tf(){var e=0,t=0;if(!(r[7688]|0)){ff(9448);Fe(32,9448,g|0)|0;t=7688;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9448)|0)){e=9448;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));ff(9448)}return 9448}function nf(e){e=e|0;return 0}function rf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=tf()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];of(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{uf(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function of(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function uf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=af(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;lf(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];of(u,r,n);o[s>>2]=(o[s>>2]|0)+12;sf(e,l);cf(l);h=c;return}}function af(e){e=e|0;return 357913941}function lf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function sf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function cf(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function ff(e){e=e|0;hf(e);return}function df(e){e=e|0;pf(e+24|0);return}function pf(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function hf(e){e=e|0;var t=0;t=Za()|0;nl(e,2,6,t,vf()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function vf(){return 1204}function mf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=gf(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];yf(t,i,n);h=r;return}function gf(e){e=e|0;return(o[(tf()|0)+24>>2]|0)+(e*12|0)|0}function yf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;_f(i,n);i=bf(i,n)|0;vA[r&31](e,i);h=u;return}function _f(e,t){e=e|0;t=t|0;return}function bf(e,t){e=e|0;t=t|0;return wf(t)|0}function wf(e){e=e|0;return e|0}function Ef(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Df(e,n,i,0);h=r;return}function Df(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Sf()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Cf(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,kf(u,r)|0,r);h=i;return}function Sf(){var e=0,t=0;if(!(r[7696]|0)){Nf(9484);Fe(33,9484,g|0)|0;t=7696;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9484)|0)){e=9484;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Nf(9484)}return 9484}function Cf(e){e=e|0;return 0}function kf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Sf()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Tf(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{xf(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Tf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function xf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Af(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Of(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Tf(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Pf(e,l);If(l);h=c;return}}function Af(e){e=e|0;return 357913941}function Of(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Pf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function If(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Nf(e){e=e|0;Ff(e);return}function Mf(e){e=e|0;Rf(e+24|0);return}function Rf(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Ff(e){e=e|0;var t=0;t=Za()|0;nl(e,2,1,t,Lf()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Lf(){return 1212}function Bf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+8|0;a=i;l=jf(e)|0;e=o[l+4>>2]|0;o[a>>2]=o[l>>2];o[a+4>>2]=e;o[u>>2]=o[a>>2];o[u+4>>2]=o[a+4>>2];Uf(t,u,n,r);h=i;return}function jf(e){e=e|0;return(o[(Sf()|0)+24>>2]|0)+(e*12|0)|0}function Uf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;l=h;h=h+16|0;u=l+1|0;a=l;i=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)i=o[(o[e>>2]|0)+i>>2]|0;_f(u,n);u=bf(u,n)|0;cc(a,r);a=fc(a,r)|0;PA[i&15](e,u,a);h=l;return}function zf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Wf(e,n,i,1);h=r;return}function Wf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Hf()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Vf(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,qf(u,r)|0,r);h=i;return}function Hf(){var e=0,t=0;if(!(r[7704]|0)){Jf(9520);Fe(34,9520,g|0)|0;t=7704;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9520)|0)){e=9520;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Jf(9520)}return 9520}function Vf(e){e=e|0;return 0}function qf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Hf()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Gf(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{$f(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Gf(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function $f(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Yf(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Kf(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Gf(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Xf(e,l);Qf(l);h=c;return}}function Yf(e){e=e|0;return 357913941}function Kf(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Xf(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Qf(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Jf(e){e=e|0;td(e);return}function Zf(e){e=e|0;ed(e+24|0);return}function ed(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function td(e){e=e|0;var t=0;t=Za()|0;nl(e,2,1,t,nd()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function nd(){return 1224}function rd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0.0,i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+8|0;a=i;l=id(e)|0;e=o[l+4>>2]|0;o[a>>2]=o[l>>2];o[a+4>>2]=e;o[u>>2]=o[a>>2];o[u+4>>2]=o[a+4>>2];r=+od(t,u,n);h=i;return+r}function id(e){e=e|0;return(o[(Hf()|0)+24>>2]|0)+(e*12|0)|0}function od(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0.0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Ql(i,n);i=Jl(i,n)|0;a=+Mu(+kA[r&7](e,i));h=u;return+a}function ud(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ad(e,n,i,1);h=r;return}function ad(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=ld()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=sd(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,cd(u,r)|0,r);h=i;return}function ld(){var e=0,t=0;if(!(r[7712]|0)){gd(9556);Fe(35,9556,g|0)|0;t=7712;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9556)|0)){e=9556;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));gd(9556)}return 9556}function sd(e){e=e|0;return 0}function cd(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=ld()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];fd(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{dd(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function fd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function dd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=pd(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;hd(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];fd(u,r,n);o[s>>2]=(o[s>>2]|0)+12;vd(e,l);md(l);h=c;return}}function pd(e){e=e|0;return 357913941}function hd(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function vd(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function md(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function gd(e){e=e|0;bd(e);return}function yd(e){e=e|0;_d(e+24|0);return}function _d(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function bd(e){e=e|0;var t=0;t=Za()|0;nl(e,2,5,t,wd()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function wd(){return 1232}function Ed(e,t){e=e|0;t=t|0;var n=0.0,r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Dd(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];n=+Sd(t,i);h=r;return+n}function Dd(e){e=e|0;return(o[(ld()|0)+24>>2]|0)+(e*12|0)|0}function Sd(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return+ +Mu(+wA[n&15](e))}function Cd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];kd(e,n,i,1);h=r;return}function kd(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Td()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=xd(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Ad(u,r)|0,r);h=i;return}function Td(){var e=0,t=0;if(!(r[7720]|0)){Fd(9592);Fe(36,9592,g|0)|0;t=7720;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9592)|0)){e=9592;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Fd(9592)}return 9592}function xd(e){e=e|0;return 0}function Ad(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Td()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Od(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Pd(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Od(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Pd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Id(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Nd(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Od(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Md(e,l);Rd(l);h=c;return}}function Id(e){e=e|0;return 357913941}function Nd(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Md(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Rd(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Fd(e){e=e|0;jd(e);return}function Ld(e){e=e|0;Bd(e+24|0);return}function Bd(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function jd(e){e=e|0;var t=0;t=Za()|0;nl(e,2,7,t,Ud()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Ud(){return 1276}function zd(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=Wd(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=Hd(t,r)|0;h=n;return t|0}function Wd(e){e=e|0;return(o[(Td()|0)+24>>2]|0)+(e*12|0)|0}function Hd(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+16|0;r=i;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;vA[n&31](r,e);r=Vd(r)|0;h=i;return r|0}function Vd(e){e=e|0;var t=0,n=0,r=0,i=0;i=h;h=h+32|0;t=i+12|0;n=i;r=al(qd()|0)|0;if(!r)e=$d(e)|0;else{ll(t,r);sl(n,t);Gd(e,n);e=fl(t)|0}h=i;return e|0}function qd(){var e=0;if(!(r[7736]|0)){ip(9640);Fe(25,9640,g|0)|0;e=7736;o[e>>2]=1;o[e+4>>2]=0}return 9640}function Gd(e,t){e=e|0;t=t|0;Jd(t,e,e+8|0)|0;return}function $d(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0;n=h;h=h+16|0;i=n+4|0;a=n;r=UD(8)|0;t=r;l=$T(16)|0;o[l>>2]=o[e>>2];o[l+4>>2]=o[e+4>>2];o[l+8>>2]=o[e+8>>2];o[l+12>>2]=o[e+12>>2];u=t+4|0;o[u>>2]=l;e=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];Yd(e,u,i);o[r>>2]=e;h=n;return t|0}function Yd(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1244;o[n+12>>2]=t;o[e+4>>2]=n;return}function Kd(e){e=e|0;zT(e);KT(e);return}function Xd(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function Qd(e){e=e|0;KT(e);return}function Jd(e,t,n){e=e|0;t=t|0;n=n|0;t=Zd(o[e>>2]|0,t,n)|0;n=e+4|0;o[(o[n>>2]|0)+8>>2]=t;return o[(o[n>>2]|0)+8>>2]|0}function Zd(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0;r=h;h=h+16|0;i=r;Dk(i);e=Eu(e)|0;n=ep(e,o[t>>2]|0,+c[n>>3])|0;Ck(i);h=r;return n|0}function ep(e,t,n){e=e|0;t=t|0;n=+n;var r=0;r=Cu(tp()|0)|0;t=Tu(t)|0;return xe(0,r|0,e|0,t|0,+ +ku(n))|0}function tp(){var e=0;if(!(r[7728]|0)){np(9628);e=7728;o[e>>2]=1;o[e+4>>2]=0}return 9628}function np(e){e=e|0;Lu(e,rp()|0,2);return}function rp(){return 1264}function ip(e){e=e|0;Al(e);return}function op(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];up(e,n,i,1);h=r;return}function up(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=ap()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=lp(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,sp(u,r)|0,r);h=i;return}function ap(){var e=0,t=0;if(!(r[7744]|0)){mp(9684);Fe(37,9684,g|0)|0;t=7744;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9684)|0)){e=9684;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));mp(9684)}return 9684}function lp(e){e=e|0;return 0}function sp(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=ap()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];cp(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{fp(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function cp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function fp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=dp(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;pp(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];cp(u,r,n);o[s>>2]=(o[s>>2]|0)+12;hp(e,l);vp(l);h=c;return}}function dp(e){e=e|0;return 357913941}function pp(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function hp(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function vp(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function mp(e){e=e|0;_p(e);return}function gp(e){e=e|0;yp(e+24|0);return}function yp(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function _p(e){e=e|0;var t=0;t=Za()|0;nl(e,2,5,t,bp()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function bp(){return 1280}function wp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Ep(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];n=Dp(t,i,n)|0;h=r;return n|0}function Ep(e){e=e|0;return(o[(ap()|0)+24>>2]|0)+(e*12|0)|0}function Dp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;a=h;h=h+32|0;i=a;u=a+16|0;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Ql(u,n);u=Jl(u,n)|0;PA[r&15](i,e,u);u=Vd(i)|0;h=a;return u|0}function Sp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Cp(e,n,i,1);h=r;return}function Cp(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=kp()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Tp(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,xp(u,r)|0,r);h=i;return}function kp(){var e=0,t=0;if(!(r[7752]|0)){Rp(9720);Fe(38,9720,g|0)|0;t=7752;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9720)|0)){e=9720;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Rp(9720)}return 9720}function Tp(e){e=e|0;return 0}function xp(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=kp()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Ap(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Op(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Ap(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Op(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Pp(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Ip(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Ap(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Np(e,l);Mp(l);h=c;return}}function Pp(e){e=e|0;return 357913941}function Ip(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Np(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Mp(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Rp(e){e=e|0;Bp(e);return}function Fp(e){e=e|0;Lp(e+24|0);return}function Lp(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Bp(e){e=e|0;var t=0;t=Za()|0;nl(e,2,8,t,jp()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function jp(){return 1288}function Up(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=zp(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];t=Wp(t,r)|0;h=n;return t|0}function zp(e){e=e|0;return(o[(kp()|0)+24>>2]|0)+(e*12|0)|0}function Wp(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;return Nu(mA[n&31](e)|0)|0}function Hp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Vp(e,n,i,0);h=r;return}function Vp(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=qp()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Gp(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,$p(u,r)|0,r);h=i;return}function qp(){var e=0,t=0;if(!(r[7760]|0)){eh(9756);Fe(39,9756,g|0)|0;t=7760;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9756)|0)){e=9756;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));eh(9756)}return 9756}function Gp(e){e=e|0;return 0}function $p(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=qp()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Yp(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Kp(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Yp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Kp(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Xp(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Qp(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Yp(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Jp(e,l);Zp(l);h=c;return}}function Xp(e){e=e|0;return 357913941}function Qp(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Jp(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Zp(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function eh(e){e=e|0;rh(e);return}function th(e){e=e|0;nh(e+24|0);return}function nh(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function rh(e){e=e|0;var t=0;t=Za()|0;nl(e,2,8,t,ih()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ih(){return 1292}function oh(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=uh(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];ah(t,i,n);h=r;return}function uh(e){e=e|0;return(o[(qp()|0)+24>>2]|0)+(e*12|0)|0}function ah(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Kl(i,n);n=+Xl(i,n);dA[r&31](e,n);h=u;return}function lh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];sh(e,n,i,0);h=r;return}function sh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=ch()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=fh(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,dh(u,r)|0,r);h=i;return}function ch(){var e=0,t=0;if(!(r[7768]|0)){_h(9792);Fe(40,9792,g|0)|0;t=7768;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9792)|0)){e=9792;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));_h(9792)}return 9792}function fh(e){e=e|0;return 0}function dh(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=ch()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];ph(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{hh(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function ph(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function hh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=vh(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;mh(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];ph(u,r,n);o[s>>2]=(o[s>>2]|0)+12;gh(e,l);yh(l);h=c;return}}function vh(e){e=e|0;return 357913941}function mh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function gh(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function yh(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function _h(e){e=e|0;Eh(e);return}function bh(e){e=e|0;wh(e+24|0);return}function wh(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Eh(e){e=e|0;var t=0;t=Za()|0;nl(e,2,1,t,Dh()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Dh(){return 1300}function Sh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=+r;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+8|0;a=i;l=Ch(e)|0;e=o[l+4>>2]|0;o[a>>2]=o[l>>2];o[a+4>>2]=e;o[u>>2]=o[a>>2];o[u+4>>2]=o[a+4>>2];kh(t,u,n,r);h=i;return}function Ch(e){e=e|0;return(o[(ch()|0)+24>>2]|0)+(e*12|0)|0}function kh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=+r;var i=0,u=0,a=0,l=0;l=h;h=h+16|0;u=l+1|0;a=l;i=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)i=o[(o[e>>2]|0)+i>>2]|0;Ql(u,n);u=Jl(u,n)|0;Kl(a,r);r=+Xl(a,r);NA[i&15](e,u,r);h=l;return}function Th(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];xh(e,n,i,0);h=r;return}function xh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Ah()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Oh(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Ph(u,r)|0,r);h=i;return}function Ah(){var e=0,t=0;if(!(r[7776]|0)){Bh(9828);Fe(41,9828,g|0)|0;t=7776;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9828)|0)){e=9828;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Bh(9828)}return 9828}function Oh(e){e=e|0;return 0}function Ph(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Ah()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Ih(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Nh(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Ih(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Nh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Mh(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Rh(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Ih(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Fh(e,l);Lh(l);h=c;return}}function Mh(e){e=e|0;return 357913941}function Rh(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Fh(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Lh(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Bh(e){e=e|0;zh(e);return}function jh(e){e=e|0;Uh(e+24|0);return}function Uh(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function zh(e){e=e|0;var t=0;t=Za()|0;nl(e,2,7,t,Wh()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Wh(){return 1312}function Hh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Vh(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];qh(t,i,n);h=r;return}function Vh(e){e=e|0;return(o[(Ah()|0)+24>>2]|0)+(e*12|0)|0}function qh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Ql(i,n);i=Jl(i,n)|0;vA[r&31](e,i);h=u;return}function Gh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];$h(e,n,i,0);h=r;return}function $h(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=Yh()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Kh(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Xh(u,r)|0,r);h=i;return}function Yh(){var e=0,t=0;if(!(r[7784]|0)){rv(9864);Fe(42,9864,g|0)|0;t=7784;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9864)|0)){e=9864;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));rv(9864)}return 9864}function Kh(e){e=e|0;return 0}function Xh(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=Yh()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Qh(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Jh(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Qh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Jh(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Zh(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;ev(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Qh(u,r,n);o[s>>2]=(o[s>>2]|0)+12;tv(e,l);nv(l);h=c;return}}function Zh(e){e=e|0;return 357913941}function ev(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function tv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function nv(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function rv(e){e=e|0;uv(e);return}function iv(e){e=e|0;ov(e+24|0);return}function ov(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function uv(e){e=e|0;var t=0;t=Za()|0;nl(e,2,8,t,av()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function av(){return 1320}function lv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=sv(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];cv(t,i,n);h=r;return}function sv(e){e=e|0;return(o[(Yh()|0)+24>>2]|0)+(e*12|0)|0}function cv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;fv(i,n);i=dv(i,n)|0;vA[r&31](e,i);h=u;return}function fv(e,t){e=e|0;t=t|0;return}function dv(e,t){e=e|0;t=t|0;return pv(t)|0}function pv(e){e=e|0;return e|0}function hv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];vv(e,n,i,0);h=r;return}function vv(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=mv()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=gv(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,yv(u,r)|0,r);h=i;return}function mv(){var e=0,t=0;if(!(r[7792]|0)){Cv(9900);Fe(43,9900,g|0)|0;t=7792;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9900)|0)){e=9900;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Cv(9900)}return 9900}function gv(e){e=e|0;return 0}function yv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=mv()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];_v(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{bv(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function _v(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function bv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=wv(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Ev(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];_v(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Dv(e,l);Sv(l);h=c;return}}function wv(e){e=e|0;return 357913941}function Ev(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Dv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Sv(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Cv(e){e=e|0;xv(e);return}function kv(e){e=e|0;Tv(e+24|0);return}function Tv(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function xv(e){e=e|0;var t=0;t=Za()|0;nl(e,2,22,t,Av()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Av(){return 1344}function Ov(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0;n=h;h=h+16|0;r=n+8|0;i=n;u=Pv(e)|0;e=o[u+4>>2]|0;o[i>>2]=o[u>>2];o[i+4>>2]=e;o[r>>2]=o[i>>2];o[r+4>>2]=o[i+4>>2];Iv(t,r);h=n;return}function Pv(e){e=e|0;return(o[(mv()|0)+24>>2]|0)+(e*12|0)|0}function Iv(e,t){e=e|0;t=t|0;var n=0;n=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)n=o[(o[e>>2]|0)+n>>2]|0;hA[n&127](e);return}function Nv(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=Mv()|0;e=Rv(n)|0;La(u,t,i,e,Fv(n,r)|0,r);return}function Mv(){var e=0,t=0;if(!(r[7800]|0)){Hv(9936);Fe(44,9936,g|0)|0;t=7800;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9936)|0)){e=9936;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Hv(9936)}return 9936}function Rv(e){e=e|0;return e|0}function Fv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=Mv()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){Lv(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{Bv(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function Lv(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function Bv(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=jv(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;Uv(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;Lv(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;zv(e,i);Wv(i);h=l;return}}function jv(e){e=e|0;return 536870911}function Uv(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function zv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Wv(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function Hv(e){e=e|0;Gv(e);return}function Vv(e){e=e|0;qv(e+24|0);return}function qv(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function Gv(e){e=e|0;var t=0;t=Za()|0;nl(e,1,23,t,vf()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function $v(e,t){e=e|0;t=t|0;Kv(o[(Yv(e)|0)>>2]|0,t);return}function Yv(e){e=e|0;return(o[(Mv()|0)+24>>2]|0)+(e<<3)|0}function Kv(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;_f(r,t);t=bf(r,t)|0;hA[e&127](t);h=n;return}function Xv(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=Qv()|0;e=Jv(n)|0;La(u,t,i,e,Zv(n,r)|0,r);return}function Qv(){var e=0,t=0;if(!(r[7808]|0)){um(9972);Fe(45,9972,g|0)|0;t=7808;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(9972)|0)){e=9972;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));um(9972)}return 9972}function Jv(e){e=e|0;return e|0}function Zv(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=Qv()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){em(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{tm(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function em(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function tm(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=nm(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;rm(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;em(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;im(e,i);om(i);h=l;return}}function nm(e){e=e|0;return 536870911}function rm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function im(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function om(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function um(e){e=e|0;sm(e);return}function am(e){e=e|0;lm(e+24|0);return}function lm(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function sm(e){e=e|0;var t=0;t=Za()|0;nl(e,1,9,t,cm()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function cm(){return 1348}function fm(e,t){e=e|0;t=t|0;return pm(o[(dm(e)|0)>>2]|0,t)|0}function dm(e){e=e|0;return(o[(Qv()|0)+24>>2]|0)+(e<<3)|0}function pm(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;hm(r,t);t=vm(r,t)|0;t=dc(mA[e&31](t)|0)|0;h=n;return t|0}function hm(e,t){e=e|0;t=t|0;return}function vm(e,t){e=e|0;t=t|0;return mm(t)|0}function mm(e){e=e|0;return e|0}function gm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=ym()|0;e=_m(n)|0;La(u,t,i,e,bm(n,r)|0,r);return}function ym(){var e=0,t=0;if(!(r[7816]|0)){Tm(10008);Fe(46,10008,g|0)|0;t=7816;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10008)|0)){e=10008;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Tm(10008)}return 10008}function _m(e){e=e|0;return e|0}function bm(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=ym()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){wm(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{Em(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function wm(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function Em(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=Dm(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;Sm(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;wm(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;Cm(e,i);km(i);h=l;return}}function Dm(e){e=e|0;return 536870911}function Sm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function Cm(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function km(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function Tm(e){e=e|0;Om(e);return}function xm(e){e=e|0;Am(e+24|0);return}function Am(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function Om(e){e=e|0;var t=0;t=Za()|0;nl(e,1,15,t,Ac()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Pm(e){e=e|0;return Nm(o[(Im(e)|0)>>2]|0)|0}function Im(e){e=e|0;return(o[(ym()|0)+24>>2]|0)+(e<<3)|0}function Nm(e){e=e|0;return dc(TA[e&7]()|0)|0}function Mm(){var e=0;if(!(r[7832]|0)){Vm(10052);Fe(25,10052,g|0)|0;e=7832;o[e>>2]=1;o[e+4>>2]=0}return 10052}function Rm(e,t){e=e|0;t=t|0;o[e>>2]=Fm()|0;o[e+4>>2]=Lm()|0;o[e+12>>2]=t;o[e+8>>2]=Bm()|0;o[e+32>>2]=2;return}function Fm(){return 11709}function Lm(){return 1188}function Bm(){return Wm()|0}function jm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){zm(n);KT(n)}}else if(t|0){Qi(t);KT(t)}return}function Um(e,t){e=e|0;t=t|0;return t&e|0}function zm(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function Wm(){var e=0;if(!(r[7824]|0)){o[2511]=Hm()|0;o[2512]=0;e=7824;o[e>>2]=1;o[e+4>>2]=0}return 10044}function Hm(){return 0}function Vm(e){e=e|0;Al(e);return}function qm(e){e=e|0;var t=0,n=0,r=0,i=0,u=0;t=h;h=h+32|0;n=t+24|0;u=t+16|0;i=t+8|0;r=t;Gm(e,4827);$m(e,4834,3)|0;Ym(e,3682,47)|0;o[u>>2]=9;o[u+4>>2]=0;o[n>>2]=o[u>>2];o[n+4>>2]=o[u+4>>2];Km(e,4841,n)|0;o[i>>2]=1;o[i+4>>2]=0;o[n>>2]=o[i>>2];o[n+4>>2]=o[i+4>>2];Xm(e,4871,n)|0;o[r>>2]=10;o[r+4>>2]=0;o[n>>2]=o[r>>2];o[n+4>>2]=o[r+4>>2];Qm(e,4891,n)|0;h=t;return}function Gm(e,t){e=e|0;t=t|0;var n=0;n=Vy()|0;o[e>>2]=n;qy(n,t);cw(o[e>>2]|0);return}function $m(e,t,n){e=e|0;t=t|0;n=n|0;Cy(e,Ia(t)|0,n,0);return e|0}function Ym(e,t,n){e=e|0;t=t|0;n=n|0;ay(e,Ia(t)|0,n,0);return e|0}function Km(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];jg(e,t,i);h=r;return e|0}function Xm(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];gg(e,t,i);h=r;return e|0}function Qm(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=o[n+4>>2]|0;o[u>>2]=o[n>>2];o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Jm(e,t,i);h=r;return e|0}function Jm(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Zm(e,n,i,1);h=r;return}function Zm(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=eg()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=tg(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,ng(u,r)|0,r);h=i;return}function eg(){var e=0,t=0;if(!(r[7840]|0)){sg(10100);Fe(48,10100,g|0)|0;t=7840;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10100)|0)){e=10100;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));sg(10100)}return 10100}function tg(e){e=e|0;return 0}function ng(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=eg()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];rg(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{ig(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function rg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function ig(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=og(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;ug(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];rg(u,r,n);o[s>>2]=(o[s>>2]|0)+12;ag(e,l);lg(l);h=c;return}}function og(e){e=e|0;return 357913941}function ug(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function ag(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function lg(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function sg(e){e=e|0;dg(e);return}function cg(e){e=e|0;fg(e+24|0);return}function fg(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function dg(e){e=e|0;var t=0;t=Za()|0;nl(e,2,6,t,pg()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function pg(){return 1364}function hg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=vg(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];n=mg(t,i,n)|0;h=r;return n|0}function vg(e){e=e|0;return(o[(eg()|0)+24>>2]|0)+(e*12|0)|0}function mg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Ql(i,n);i=Jl(i,n)|0;i=bs(DA[r&15](e,i)|0)|0;h=u;return i|0}function gg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];yg(e,n,i,0);h=r;return}function yg(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=_g()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=bg(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,wg(u,r)|0,r);h=i;return}function _g(){var e=0,t=0;if(!(r[7848]|0)){xg(10136);Fe(49,10136,g|0)|0;t=7848;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10136)|0)){e=10136;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));xg(10136)}return 10136}function bg(e){e=e|0;return 0}function wg(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=_g()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Eg(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{Dg(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Eg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function Dg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Sg(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;Cg(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Eg(u,r,n);o[s>>2]=(o[s>>2]|0)+12;kg(e,l);Tg(l);h=c;return}}function Sg(e){e=e|0;return 357913941}function Cg(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function kg(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Tg(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function xg(e){e=e|0;Pg(e);return}function Ag(e){e=e|0;Og(e+24|0);return}function Og(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Pg(e){e=e|0;var t=0;t=Za()|0;nl(e,2,9,t,Ig()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Ig(){return 1372}function Ng(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;i=r+8|0;u=r;a=Mg(e)|0;e=o[a+4>>2]|0;o[u>>2]=o[a>>2];o[u+4>>2]=e;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Rg(t,i,n);h=r;return}function Mg(e){e=e|0;return(o[(_g()|0)+24>>2]|0)+(e*12|0)|0}function Rg(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0,a=ft;u=h;h=h+16|0;i=u;r=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)r=o[(o[e>>2]|0)+r>>2]|0;Fg(i,n);a=Y(Lg(i,n));fA[r&1](e,a);h=u;return}function Fg(e,t){e=e|0;t=+t;return}function Lg(e,t){e=e|0;t=+t;return Y(Bg(t))}function Bg(e){e=+e;return Y(e)}function jg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;i=r+8|0;u=r;l=o[n>>2]|0;a=o[n+4>>2]|0;n=Ia(t)|0;o[u>>2]=l;o[u+4>>2]=a;o[i>>2]=o[u>>2];o[i+4>>2]=o[u+4>>2];Ug(e,n,i,0);h=r;return}function Ug(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0;i=h;h=h+32|0;u=i+16|0;f=i+8|0;l=i;c=o[n>>2]|0;s=o[n+4>>2]|0;a=o[e>>2]|0;e=zg()|0;o[f>>2]=c;o[f+4>>2]=s;o[u>>2]=o[f>>2];o[u+4>>2]=o[f+4>>2];n=Wg(u)|0;o[l>>2]=c;o[l+4>>2]=s;o[u>>2]=o[l>>2];o[u+4>>2]=o[l+4>>2];La(a,t,e,n,Hg(u,r)|0,r);h=i;return}function zg(){var e=0,t=0;if(!(r[7856]|0)){Xg(10172);Fe(50,10172,g|0)|0;t=7856;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10172)|0)){e=10172;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Xg(10172)}return 10172}function Wg(e){e=e|0;return 0}function Hg(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0;f=h;h=h+32|0;i=f+24|0;a=f+16|0;l=f;s=f+8|0;u=o[e>>2]|0;r=o[e+4>>2]|0;o[l>>2]=u;o[l+4>>2]=r;d=zg()|0;c=d+24|0;e=za(t,4)|0;o[s>>2]=e;t=d+28|0;n=o[t>>2]|0;if(n>>>0<(o[d+32>>2]|0)>>>0){o[a>>2]=u;o[a+4>>2]=r;o[i>>2]=o[a>>2];o[i+4>>2]=o[a+4>>2];Vg(n,i,e);e=(o[t>>2]|0)+12|0;o[t>>2]=e}else{qg(c,l,s);e=o[t>>2]|0}h=f;return((e-(o[c>>2]|0)|0)/12|0)+-1|0}function Vg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=o[t+4>>2]|0;o[e>>2]=o[t>>2];o[e+4>>2]=r;o[e+8>>2]=n;return}function qg(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0;c=h;h=h+48|0;r=c+32|0;a=c+24|0;l=c;s=e+4|0;i=(((o[s>>2]|0)-(o[e>>2]|0)|0)/12|0)+1|0;u=Gg(e)|0;if(u>>>0>>0)UT(e);else{f=o[e>>2]|0;p=((o[e+8>>2]|0)-f|0)/12|0;d=p<<1;$g(l,p>>>0>>1>>>0?d>>>0>>0?i:d:u,((o[s>>2]|0)-f|0)/12|0,e+8|0);s=l+8|0;u=o[s>>2]|0;i=o[t+4>>2]|0;n=o[n>>2]|0;o[a>>2]=o[t>>2];o[a+4>>2]=i;o[r>>2]=o[a>>2];o[r+4>>2]=o[a+4>>2];Vg(u,r,n);o[s>>2]=(o[s>>2]|0)+12;Yg(e,l);Kg(l);h=c;return}}function Gg(e){e=e|0;return 357913941}function $g(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>357913941)Ye();else{i=$T(t*12|0)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n*12|0)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t*12|0);return}function Yg(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(((i|0)/-12|0)*12|0)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function Kg(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~(((r+-12-t|0)>>>0)/12|0)*12|0);e=o[e>>2]|0;if(e|0)KT(e);return}function Xg(e){e=e|0;Zg(e);return}function Qg(e){e=e|0;Jg(e+24|0);return}function Jg(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~(((t+-12-r|0)>>>0)/12|0)*12|0);KT(n)}return}function Zg(e){e=e|0;var t=0;t=Za()|0;nl(e,2,3,t,ey()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ey(){return 1380}function ty(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+8|0;a=i;l=ny(e)|0;e=o[l+4>>2]|0;o[a>>2]=o[l>>2];o[a+4>>2]=e;o[u>>2]=o[a>>2];o[u+4>>2]=o[a+4>>2];ry(t,u,n,r);h=i;return}function ny(e){e=e|0;return(o[(zg()|0)+24>>2]|0)+(e*12|0)|0}function ry(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;l=h;h=h+16|0;u=l+1|0;a=l;i=o[t>>2]|0;t=o[t+4>>2]|0;e=e+(t>>1)|0;if(t&1)i=o[(o[e>>2]|0)+i>>2]|0;Ql(u,n);u=Jl(u,n)|0;iy(a,r);a=oy(a,r)|0;PA[i&15](e,u,a);h=l;return}function iy(e,t){e=e|0;t=t|0;return}function oy(e,t){e=e|0;t=t|0;return uy(t)|0}function uy(e){e=e|0;return(e|0)!=0|0}function ay(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=ly()|0;e=sy(n)|0;La(u,t,i,e,cy(n,r)|0,r);return}function ly(){var e=0,t=0;if(!(r[7864]|0)){gy(10208);Fe(51,10208,g|0)|0;t=7864;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10208)|0)){e=10208;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));gy(10208)}return 10208}function sy(e){e=e|0;return e|0}function cy(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=ly()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){fy(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{dy(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function fy(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function dy(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=py(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;hy(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;fy(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;vy(e,i);my(i);h=l;return}}function py(e){e=e|0;return 536870911}function hy(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function vy(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function my(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function gy(e){e=e|0;by(e);return}function yy(e){e=e|0;_y(e+24|0);return}function _y(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function by(e){e=e|0;var t=0;t=Za()|0;nl(e,1,24,t,wy()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function wy(){return 1392}function Ey(e,t){e=e|0;t=t|0;Sy(o[(Dy(e)|0)>>2]|0,t);return}function Dy(e){e=e|0;return(o[(ly()|0)+24>>2]|0)+(e<<3)|0}function Sy(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;hm(r,t);t=vm(r,t)|0;hA[e&127](t);h=n;return}function Cy(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=ky()|0;e=Ty(n)|0;La(u,t,i,e,xy(n,r)|0,r);return}function ky(){var e=0,t=0;if(!(r[7872]|0)){Ry(10244);Fe(52,10244,g|0)|0;t=7872;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10244)|0)){e=10244;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));Ry(10244)}return 10244}function Ty(e){e=e|0;return e|0}function xy(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=ky()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){Ay(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{Oy(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function Ay(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function Oy(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=Py(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;Iy(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;Ay(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;Ny(e,i);My(i);h=l;return}}function Py(e){e=e|0;return 536870911}function Iy(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function Ny(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function My(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function Ry(e){e=e|0;By(e);return}function Fy(e){e=e|0;Ly(e+24|0);return}function Ly(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function By(e){e=e|0;var t=0;t=Za()|0;nl(e,1,16,t,jy()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function jy(){return 1400}function Uy(e){e=e|0;return Wy(o[(zy(e)|0)>>2]|0)|0}function zy(e){e=e|0;return(o[(ky()|0)+24>>2]|0)+(e<<3)|0}function Wy(e){e=e|0;return Hy(TA[e&7]()|0)|0}function Hy(e){e=e|0;return e|0}function Vy(){var e=0;if(!(r[7880]|0)){Qy(10280);Fe(25,10280,g|0)|0;e=7880;o[e>>2]=1;o[e+4>>2]=0}return 10280}function qy(e,t){e=e|0;t=t|0;o[e>>2]=Gy()|0;o[e+4>>2]=$y()|0;o[e+12>>2]=t;o[e+8>>2]=Yy()|0;o[e+32>>2]=4;return}function Gy(){return 11711}function $y(){return 1356}function Yy(){return Wm()|0}function Ky(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){Xy(n);KT(n)}}else if(t|0){Hi(t);KT(t)}return}function Xy(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function Qy(e){e=e|0;Al(e);return}function Jy(e){e=e|0;Zy(e,4920);e_(e)|0;t_(e)|0;return}function Zy(e,t){e=e|0;t=t|0;var n=0;n=qd()|0;o[e>>2]=n;T_(n,t);cw(o[e>>2]|0);return}function e_(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,v_()|0);return e|0}function t_(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,n_()|0);return e|0}function n_(){var e=0;if(!(r[7888]|0)){i_(10328);Fe(53,10328,g|0)|0;e=7888;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10328)|0))i_(10328);return 10328}function r_(e,t){e=e|0;t=t|0;La(e,0,t,0,0,0);return}function i_(e){e=e|0;a_(e);s_(e,10);return}function o_(e){e=e|0;u_(e+24|0);return}function u_(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function a_(e){e=e|0;var t=0;t=Za()|0;nl(e,5,1,t,d_()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function l_(e,t,n){e=e|0;t=t|0;n=+n;c_(e,t,n);return}function s_(e,t){e=e|0;t=t|0;o[e+20>>2]=t;return}function c_(e,t,n){e=e|0;t=t|0;n=+n;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+16|0;u=r+8|0;l=r+13|0;i=r;a=r+12|0;Ql(l,t);o[u>>2]=Jl(l,t)|0;Kl(a,n);c[i>>3]=+Xl(a,n);f_(e,u,i);h=r;return}function f_(e,t,n){e=e|0;t=t|0;n=n|0;Vo(e+8|0,o[t>>2]|0,+c[n>>3]);r[e+24>>0]=1;return}function d_(){return 1404}function p_(e,t){e=e|0;t=+t;return h_(e,t)|0}function h_(e,t){e=e|0;t=+t;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;r=h;h=h+16|0;u=r+4|0;a=r+8|0;l=r;i=UD(8)|0;n=i;s=$T(16)|0;Ql(u,e);e=Jl(u,e)|0;Kl(a,t);Vo(s,e,+Xl(a,t));a=n+4|0;o[a>>2]=s;e=$T(8)|0;a=o[a>>2]|0;o[l>>2]=0;o[u>>2]=o[l>>2];Yd(e,a,u);o[i>>2]=e;h=r;return n|0}function v_(){var e=0;if(!(r[7896]|0)){m_(10364);Fe(54,10364,g|0)|0;e=7896;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10364)|0))m_(10364);return 10364}function m_(e){e=e|0;__(e);s_(e,55);return}function g_(e){e=e|0;y_(e+24|0);return}function y_(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function __(e){e=e|0;var t=0;t=Za()|0;nl(e,5,4,t,S_()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function b_(e){e=e|0;w_(e);return}function w_(e){e=e|0;E_(e);return}function E_(e){e=e|0;D_(e+8|0);r[e+24>>0]=1;return}function D_(e){e=e|0;o[e>>2]=0;c[e+8>>3]=0.0;return}function S_(){return 1424}function C_(){return k_()|0}function k_(){var e=0,t=0,n=0,r=0,i=0,u=0,a=0;t=h;h=h+16|0;i=t+4|0;a=t;n=UD(8)|0;e=n;r=$T(16)|0;D_(r);u=e+4|0;o[u>>2]=r;r=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];Yd(r,u,i);o[n>>2]=r;h=t;return e|0}function T_(e,t){e=e|0;t=t|0;o[e>>2]=x_()|0;o[e+4>>2]=A_()|0;o[e+12>>2]=t;o[e+8>>2]=O_()|0;o[e+32>>2]=5;return}function x_(){return 11710}function A_(){return 1416}function O_(){return N_()|0}function P_(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){I_(n);KT(n)}}else if(t|0)KT(t);return}function I_(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function N_(){var e=0;if(!(r[7904]|0)){o[2600]=M_()|0;o[2601]=0;e=7904;o[e>>2]=1;o[e+4>>2]=0}return 10400}function M_(){return o[357]|0}function R_(e){e=e|0;F_(e,4926);L_(e)|0;return}function F_(e,t){e=e|0;t=t|0;var n=0;n=ul()|0;o[e>>2]=n;K_(n,t);cw(o[e>>2]|0);return}function L_(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,B_()|0);return e|0}function B_(){var e=0;if(!(r[7912]|0)){j_(10412);Fe(56,10412,g|0)|0;e=7912;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10412)|0))j_(10412);return 10412}function j_(e){e=e|0;W_(e);s_(e,57);return}function U_(e){e=e|0;z_(e+24|0);return}function z_(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function W_(e){e=e|0;var t=0;t=Za()|0;nl(e,5,5,t,G_()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function H_(e){e=e|0;V_(e);return}function V_(e){e=e|0;q_(e);return}function q_(e){e=e|0;var t=0,n=0;t=e+8|0;n=t+48|0;do{o[t>>2]=0;t=t+4|0}while((t|0)<(n|0));r[e+56>>0]=1;return}function G_(){return 1432}function $_(){return Y_()|0}function Y_(){var e=0,t=0,n=0,r=0,i=0,u=0,a=0,l=0;a=h;h=h+16|0;e=a+4|0;t=a;n=UD(8)|0;r=n;i=$T(48)|0;u=i;l=u+48|0;do{o[u>>2]=0;u=u+4|0}while((u|0)<(l|0));u=r+4|0;o[u>>2]=i;l=$T(8)|0;u=o[u>>2]|0;o[t>>2]=0;o[e>>2]=o[t>>2];pl(l,u,e);o[n>>2]=l;h=a;return r|0}function K_(e,t){e=e|0;t=t|0;o[e>>2]=X_()|0;o[e+4>>2]=Q_()|0;o[e+12>>2]=t;o[e+8>>2]=J_()|0;o[e+32>>2]=6;return}function X_(){return 11704}function Q_(){return 1436}function J_(){return N_()|0}function Z_(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){eb(n);KT(n)}}else if(t|0)KT(t);return}function eb(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function tb(e){e=e|0;nb(e,4933);rb(e)|0;ib(e)|0;return}function nb(e,t){e=e|0;t=t|0;var n=0;n=Nb()|0;o[e>>2]=n;Mb(n,t);cw(o[e>>2]|0);return}function rb(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,wb()|0);return e|0}function ib(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,ob()|0);return e|0}function ob(){var e=0;if(!(r[7920]|0)){ub(10452);Fe(58,10452,g|0)|0;e=7920;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10452)|0))ub(10452);return 10452}function ub(e){e=e|0;sb(e);s_(e,1);return}function ab(e){e=e|0;lb(e+24|0);return}function lb(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function sb(e){e=e|0;var t=0;t=Za()|0;nl(e,5,1,t,hb()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function cb(e,t,n){e=e|0;t=+t;n=+n;fb(e,t,n);return}function fb(e,t,n){e=e|0;t=+t;n=+n;var r=0,i=0,o=0,u=0,a=0;r=h;h=h+32|0;o=r+8|0;a=r+17|0;i=r;u=r+16|0;Kl(a,t);c[o>>3]=+Xl(a,t);Kl(u,n);c[i>>3]=+Xl(u,n);db(e,o,i);h=r;return}function db(e,t,n){e=e|0;t=t|0;n=n|0;pb(e+8|0,+c[t>>3],+c[n>>3]);r[e+24>>0]=1;return}function pb(e,t,n){e=e|0;t=+t;n=+n;c[e>>3]=t;c[e+8>>3]=n;return}function hb(){return 1472}function vb(e,t){e=+e;t=+t;return mb(e,t)|0}function mb(e,t){e=+e;t=+t;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;r=h;h=h+16|0;a=r+4|0;l=r+8|0;s=r;i=UD(8)|0;n=i;u=$T(16)|0;Kl(a,e);e=+Xl(a,e);Kl(l,t);pb(u,e,+Xl(l,t));l=n+4|0;o[l>>2]=u;u=$T(8)|0;l=o[l>>2]|0;o[s>>2]=0;o[a>>2]=o[s>>2];gb(u,l,a);o[i>>2]=u;h=r;return n|0}function gb(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1452;o[n+12>>2]=t;o[e+4>>2]=n;return}function yb(e){e=e|0;zT(e);KT(e);return}function _b(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function bb(e){e=e|0;KT(e);return}function wb(){var e=0;if(!(r[7928]|0)){Eb(10488);Fe(59,10488,g|0)|0;e=7928;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10488)|0))Eb(10488);return 10488}function Eb(e){e=e|0;Cb(e);s_(e,60);return}function Db(e){e=e|0;Sb(e+24|0);return}function Sb(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function Cb(e){e=e|0;var t=0;t=Za()|0;nl(e,5,6,t,Ob()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function kb(e){e=e|0;Tb(e);return}function Tb(e){e=e|0;xb(e);return}function xb(e){e=e|0;Ab(e+8|0);r[e+24>>0]=1;return}function Ab(e){e=e|0;o[e>>2]=0;o[e+4>>2]=0;o[e+8>>2]=0;o[e+12>>2]=0;return}function Ob(){return 1492}function Pb(){return Ib()|0}function Ib(){var e=0,t=0,n=0,r=0,i=0,u=0,a=0;t=h;h=h+16|0;i=t+4|0;a=t;n=UD(8)|0;e=n;r=$T(16)|0;Ab(r);u=e+4|0;o[u>>2]=r;r=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];gb(r,u,i);o[n>>2]=r;h=t;return e|0}function Nb(){var e=0;if(!(r[7936]|0)){Ub(10524);Fe(25,10524,g|0)|0;e=7936;o[e>>2]=1;o[e+4>>2]=0}return 10524}function Mb(e,t){e=e|0;t=t|0;o[e>>2]=Rb()|0;o[e+4>>2]=Fb()|0;o[e+12>>2]=t;o[e+8>>2]=Lb()|0;o[e+32>>2]=7;return}function Rb(){return 11700}function Fb(){return 1484}function Lb(){return N_()|0}function Bb(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){jb(n);KT(n)}}else if(t|0)KT(t);return}function jb(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function Ub(e){e=e|0;Al(e);return}function zb(e,t,n){e=e|0;t=t|0;n=n|0;e=Ia(t)|0;t=Wb(n)|0;n=Hb(n,0)|0;xw(e,t,n,Vb()|0,0);return}function Wb(e){e=e|0;return e|0}function Hb(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=Vb()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){Jb(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{Zb(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function Vb(){var e=0,t=0;if(!(r[7944]|0)){qb(10568);Fe(61,10568,g|0)|0;t=7944;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10568)|0)){e=10568;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));qb(10568)}return 10568}function qb(e){e=e|0;Yb(e);return}function Gb(e){e=e|0;$b(e+24|0);return}function $b(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function Yb(e){e=e|0;var t=0;t=Za()|0;nl(e,1,17,t,Yc()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function Kb(e){e=e|0;return Qb(o[(Xb(e)|0)>>2]|0)|0}function Xb(e){e=e|0;return(o[(Vb()|0)+24>>2]|0)+(e<<3)|0}function Qb(e){e=e|0;return Jc(TA[e&7]()|0)|0}function Jb(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function Zb(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=ew(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;tw(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;Jb(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;nw(e,i);rw(i);h=l;return}}function ew(e){e=e|0;return 536870911}function tw(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function nw(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function rw(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function iw(){ow();return}function ow(){uw(10604);return}function uw(e){e=e|0;aw(e,4955);return}function aw(e,t){e=e|0;t=t|0;var n=0;n=lw()|0;o[e>>2]=n;sw(n,t);cw(o[e>>2]|0);return}function lw(){var e=0;if(!(r[7952]|0)){bw(10612);Fe(25,10612,g|0)|0;e=7952;o[e>>2]=1;o[e+4>>2]=0}return 10612}function sw(e,t){e=e|0;t=t|0;o[e>>2]=vw()|0;o[e+4>>2]=mw()|0;o[e+12>>2]=t;o[e+8>>2]=gw()|0;o[e+32>>2]=8;return}function cw(e){e=e|0;var t=0,n=0;t=h;h=h+16|0;n=t;fw()|0;o[n>>2]=e;dw(10608,n);h=t;return}function fw(){if(!(r[11714]|0)){o[2652]=0;Fe(62,10608,g|0)|0;r[11714]=1}return 10608}function dw(e,t){e=e|0;t=t|0;var n=0;n=$T(8)|0;o[n+4>>2]=o[t>>2];o[n>>2]=o[e>>2];o[e>>2]=n;return}function pw(e){e=e|0;hw(e);return}function hw(e){e=e|0;var t=0,n=0;t=o[e>>2]|0;if(t|0)do{n=t;t=o[t>>2]|0;KT(n)}while((t|0)!=0);o[e>>2]=0;return}function vw(){return 11715}function mw(){return 1496}function gw(){return Wm()|0}function yw(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){_w(n);KT(n)}}else if(t|0)KT(t);return}function _w(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function bw(e){e=e|0;Al(e);return}function ww(e,t){e=e|0;t=t|0;var n=0,r=0;fw()|0;n=o[2652]|0;e:do{if(n|0){while(1){r=o[n+4>>2]|0;if(r|0?(rT(Ew(r)|0,e)|0)==0:0)break;n=o[n>>2]|0;if(!n)break e}Dw(r,t)}}while(0);return}function Ew(e){e=e|0;return o[e+12>>2]|0}function Dw(e,t){e=e|0;t=t|0;var n=0;e=e+36|0;n=o[e>>2]|0;if(n|0){Ji(n);KT(n)}n=$T(4)|0;yu(n,t);o[e>>2]=n;return}function Sw(){if(!(r[11716]|0)){o[2664]=0;Fe(63,10656,g|0)|0;r[11716]=1}return 10656}function Cw(){var e=0;if(!(r[11717]|0)){kw();o[2665]=1504;r[11717]=1;e=1504}else e=o[2665]|0;return e|0}function kw(){if(!(r[11740]|0)){r[11718]=za(za(8,0)|0,0)|0;r[11719]=za(za(0,0)|0,0)|0;r[11720]=za(za(0,16)|0,0)|0;r[11721]=za(za(8,0)|0,0)|0;r[11722]=za(za(0,0)|0,0)|0;r[11723]=za(za(8,0)|0,0)|0;r[11724]=za(za(0,0)|0,0)|0;r[11725]=za(za(8,0)|0,0)|0;r[11726]=za(za(0,0)|0,0)|0;r[11727]=za(za(8,0)|0,0)|0;r[11728]=za(za(0,0)|0,0)|0;r[11729]=za(za(0,0)|0,32)|0;r[11730]=za(za(0,0)|0,32)|0;r[11740]=1}return}function Tw(){return 1572}function xw(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0,c=0,f=0;u=h;h=h+32|0;f=u+16|0;c=u+12|0;s=u+8|0;l=u+4|0;a=u;o[f>>2]=e;o[c>>2]=t;o[s>>2]=n;o[l>>2]=r;o[a>>2]=i;Sw()|0;Aw(10656,f,c,s,l,a);h=u;return}function Aw(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0;a=$T(24)|0;Ua(a+4|0,o[t>>2]|0,o[n>>2]|0,o[r>>2]|0,o[i>>2]|0,o[u>>2]|0);o[a>>2]=o[e>>2];o[e>>2]=a;return}function Ow(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0,b=0;b=h;h=h+32|0;m=b+20|0;g=b+8|0;y=b+4|0;_=b;t=o[t>>2]|0;if(t|0){v=m+4|0;s=m+8|0;c=g+4|0;f=g+8|0;d=g+8|0;p=m+8|0;do{a=t+4|0;l=Pw(a)|0;if(l|0){i=Iw(l)|0;o[m>>2]=0;o[v>>2]=0;o[s>>2]=0;r=(Nw(l)|0)+1|0;Mw(m,r);if(r|0)while(1){r=r+-1|0;gk(g,o[i>>2]|0);u=o[v>>2]|0;if(u>>>0<(o[p>>2]|0)>>>0){o[u>>2]=o[g>>2];o[v>>2]=(o[v>>2]|0)+4}else Rw(m,g);if(!r)break;else i=i+4|0}r=Fw(l)|0;o[g>>2]=0;o[c>>2]=0;o[f>>2]=0;e:do{if(o[r>>2]|0){i=0;u=0;while(1){if((i|0)==(u|0))Lw(g,r);else{o[i>>2]=o[r>>2];o[c>>2]=(o[c>>2]|0)+4}r=r+4|0;if(!(o[r>>2]|0))break e;i=o[c>>2]|0;u=o[d>>2]|0}}}while(0);o[y>>2]=Bw(a)|0;o[_>>2]=Xa(l)|0;jw(n,e,y,_,m,g);Uw(g);zw(m)}t=o[t>>2]|0}while((t|0)!=0)}h=b;return}function Pw(e){e=e|0;return o[e+12>>2]|0}function Iw(e){e=e|0;return o[e+12>>2]|0}function Nw(e){e=e|0;return o[e+16>>2]|0}function Mw(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+32|0;n=i;r=o[e>>2]|0;if((o[e+8>>2]|0)-r>>2>>>0>>0){bE(n,t,(o[e+4>>2]|0)-r>>2,e+8|0);wE(e,n);EE(n)}h=i;return}function Rw(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0;a=h;h=h+32|0;n=a;r=e+4|0;i=((o[r>>2]|0)-(o[e>>2]|0)>>2)+1|0;u=mE(e)|0;if(u>>>0>>0)UT(e);else{l=o[e>>2]|0;c=(o[e+8>>2]|0)-l|0;s=c>>1;bE(n,c>>2>>>0>>1>>>0?s>>>0>>0?i:s:u,(o[r>>2]|0)-l>>2,e+8|0);u=n+8|0;o[o[u>>2]>>2]=o[t>>2];o[u>>2]=(o[u>>2]|0)+4;wE(e,n);EE(n);h=a;return}}function Fw(e){e=e|0;return o[e+8>>2]|0}function Lw(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0;a=h;h=h+32|0;n=a;r=e+4|0;i=((o[r>>2]|0)-(o[e>>2]|0)>>2)+1|0;u=pE(e)|0;if(u>>>0>>0)UT(e);else{l=o[e>>2]|0;c=(o[e+8>>2]|0)-l|0;s=c>>1;gE(n,c>>2>>>0>>1>>>0?s>>>0>>0?i:s:u,(o[r>>2]|0)-l>>2,e+8|0);u=n+8|0;o[o[u>>2]>>2]=o[t>>2];o[u>>2]=(o[u>>2]|0)+4;yE(e,n);_E(n);h=a;return}}function Bw(e){e=e|0;return o[e>>2]|0}function jw(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;Ww(e,t,n,r,i,o);return}function Uw(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-4-r|0)>>>2)<<2);KT(n)}return}function zw(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-4-r|0)>>>2)<<2);KT(n)}return}function Ww(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0,f=0,d=0;a=h;h=h+48|0;f=a+40|0;l=a+32|0;d=a+24|0;s=a+12|0;c=a;Dk(l);e=Eu(e)|0;o[d>>2]=o[t>>2];n=o[n>>2]|0;r=o[r>>2]|0;Hw(s,i);Vw(c,u);o[f>>2]=o[d>>2];qw(e,f,n,r,s,c);Uw(c);zw(s);Ck(l);h=a;return}function Hw(e,t){e=e|0;t=t|0;var n=0,r=0;o[e>>2]=0;o[e+4>>2]=0;o[e+8>>2]=0;n=t+4|0;r=(o[n>>2]|0)-(o[t>>2]|0)>>2;if(r|0){hE(e,r);vE(e,o[t>>2]|0,o[n>>2]|0,r)}return}function Vw(e,t){e=e|0;t=t|0;var n=0,r=0;o[e>>2]=0;o[e+4>>2]=0;o[e+8>>2]=0;n=t+4|0;r=(o[n>>2]|0)-(o[t>>2]|0)>>2;if(r|0){fE(e,r);dE(e,o[t>>2]|0,o[n>>2]|0,r)}return}function qw(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0,f=0,d=0;a=h;h=h+32|0;f=a+28|0;d=a+24|0;l=a+12|0;s=a;c=Cu(Gw()|0)|0;o[d>>2]=o[t>>2];o[f>>2]=o[d>>2];t=$w(f)|0;n=Yw(n)|0;r=Kw(r)|0;o[l>>2]=o[i>>2];f=i+4|0;o[l+4>>2]=o[f>>2];d=i+8|0;o[l+8>>2]=o[d>>2];o[d>>2]=0;o[f>>2]=0;o[i>>2]=0;i=Xw(l)|0;o[s>>2]=o[u>>2];f=u+4|0;o[s+4>>2]=o[f>>2];d=u+8|0;o[s+8>>2]=o[d>>2];o[d>>2]=0;o[f>>2]=0;o[u>>2]=0;Oe(0,c|0,e|0,t|0,n|0,r|0,i|0,Qw(s)|0)|0;Uw(s);zw(l);h=a;return}function Gw(){var e=0;if(!(r[7968]|0)){sE(10708);e=7968;o[e>>2]=1;o[e+4>>2]=0}return 10708}function $w(e){e=e|0;return tE(e)|0}function Yw(e){e=e|0;return Zw(e)|0}function Kw(e){e=e|0;return Jc(e)|0}function Xw(e){e=e|0;return eE(e)|0}function Qw(e){e=e|0;return Jw(e)|0}function Jw(e){e=e|0;var t=0,n=0,r=0;r=(o[e+4>>2]|0)-(o[e>>2]|0)|0;n=r>>2;r=UD(r+4|0)|0;o[r>>2]=n;if(n|0){t=0;do{o[r+4+(t<<2)>>2]=Zw(o[(o[e>>2]|0)+(t<<2)>>2]|0)|0;t=t+1|0}while((t|0)!=(n|0))}return r|0}function Zw(e){e=e|0;return e|0}function eE(e){e=e|0;var t=0,n=0,r=0;r=(o[e+4>>2]|0)-(o[e>>2]|0)|0;n=r>>2;r=UD(r+4|0)|0;o[r>>2]=n;if(n|0){t=0;do{o[r+4+(t<<2)>>2]=tE((o[e>>2]|0)+(t<<2)|0)|0;t=t+1|0}while((t|0)!=(n|0))}return r|0}function tE(e){e=e|0;var t=0,n=0,r=0,i=0;i=h;h=h+32|0;t=i+12|0;n=i;r=al(nE()|0)|0;if(!r)e=rE(e)|0;else{ll(t,r);sl(n,t);bk(e,n);e=fl(t)|0}h=i;return e|0}function nE(){var e=0;if(!(r[7960]|0)){lE(10664);Fe(25,10664,g|0)|0;e=7960;o[e>>2]=1;o[e+4>>2]=0}return 10664}function rE(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0;n=h;h=h+16|0;i=n+4|0;a=n;r=UD(8)|0;t=r;l=$T(4)|0;o[l>>2]=o[e>>2];u=t+4|0;o[u>>2]=l;e=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];iE(e,u,i);o[r>>2]=e;h=n;return t|0}function iE(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1656;o[n+12>>2]=t;o[e+4>>2]=n;return}function oE(e){e=e|0;zT(e);KT(e);return}function uE(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function aE(e){e=e|0;KT(e);return}function lE(e){e=e|0;Al(e);return}function sE(e){e=e|0;Lu(e,cE()|0,5);return}function cE(){return 1676}function fE(e,t){e=e|0;t=t|0;var n=0;if((pE(e)|0)>>>0>>0)UT(e);if(t>>>0>1073741823)Ye();else{n=$T(t<<2)|0;o[e+4>>2]=n;o[e>>2]=n;o[e+8>>2]=n+(t<<2);return}}function dE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;r=e+4|0;e=n-t|0;if((e|0)>0){ix(o[r>>2]|0,t|0,e|0)|0;o[r>>2]=(o[r>>2]|0)+(e>>>2<<2)}return}function pE(e){e=e|0;return 1073741823}function hE(e,t){e=e|0;t=t|0;var n=0;if((mE(e)|0)>>>0>>0)UT(e);if(t>>>0>1073741823)Ye();else{n=$T(t<<2)|0;o[e+4>>2]=n;o[e>>2]=n;o[e+8>>2]=n+(t<<2);return}}function vE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;r=e+4|0;e=n-t|0;if((e|0)>0){ix(o[r>>2]|0,t|0,e|0)|0;o[r>>2]=(o[r>>2]|0)+(e>>>2<<2)}return}function mE(e){e=e|0;return 1073741823}function gE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>1073741823)Ye();else{i=$T(t<<2)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<2)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<2);return}function yE(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>2)<<2)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function _E(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-4-t|0)>>>2)<<2);e=o[e>>2]|0;if(e|0)KT(e);return}function bE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>1073741823)Ye();else{i=$T(t<<2)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<2)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<2);return}function wE(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>2)<<2)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function EE(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-4-t|0)>>>2)<<2);e=o[e>>2]|0;if(e|0)KT(e);return}function DE(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0;g=h;h=h+32|0;f=g+20|0;d=g+12|0;c=g+16|0;p=g+4|0;v=g;m=g+8|0;l=Cw()|0;u=o[l>>2]|0;a=o[u>>2]|0;if(a|0){s=o[l+8>>2]|0;l=o[l+4>>2]|0;while(1){gk(f,a);SE(e,f,l,s);u=u+4|0;a=o[u>>2]|0;if(!a)break;else{s=s+1|0;l=l+1|0}}}u=Tw()|0;a=o[u>>2]|0;if(a|0)do{gk(f,a);o[d>>2]=o[u+4>>2];CE(t,f,d);u=u+8|0;a=o[u>>2]|0}while((a|0)!=0);u=o[(fw()|0)>>2]|0;if(u|0)do{t=o[u+4>>2]|0;gk(f,o[(kE(t)|0)>>2]|0);o[d>>2]=Ew(t)|0;TE(n,f,d);u=o[u>>2]|0}while((u|0)!=0);gk(c,0);u=Sw()|0;o[f>>2]=o[c>>2];Ow(f,u,i);u=o[(fw()|0)>>2]|0;if(u|0){e=f+4|0;t=f+8|0;n=f+8|0;do{s=o[u+4>>2]|0;gk(d,o[(kE(s)|0)>>2]|0);AE(p,xE(s)|0);a=o[p>>2]|0;if(a|0){o[f>>2]=0;o[e>>2]=0;o[t>>2]=0;do{gk(v,o[(kE(o[a+4>>2]|0)|0)>>2]|0);l=o[e>>2]|0;if(l>>>0<(o[n>>2]|0)>>>0){o[l>>2]=o[v>>2];o[e>>2]=(o[e>>2]|0)+4}else Rw(f,v);a=o[a>>2]|0}while((a|0)!=0);OE(r,d,f);zw(f)}o[m>>2]=o[d>>2];c=PE(s)|0;o[f>>2]=o[m>>2];Ow(f,c,i);kl(p);u=o[u>>2]|0}while((u|0)!=0)}h=g;return}function SE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;qE(e,t,n,r);return}function CE(e,t,n){e=e|0;t=t|0;n=n|0;VE(e,t,n);return}function kE(e){e=e|0;return e|0}function TE(e,t,n){e=e|0;t=t|0;n=n|0;jE(e,t,n);return}function xE(e){e=e|0;return e+16|0}function AE(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;u=h;h=h+16|0;i=u+8|0;n=u;o[e>>2]=0;r=o[t>>2]|0;o[i>>2]=r;o[n>>2]=e;n=LE(n)|0;if(r|0){r=$T(12)|0;a=(BE(i)|0)+4|0;e=o[a+4>>2]|0;t=r+4|0;o[t>>2]=o[a>>2];o[t+4>>2]=e;t=o[o[i>>2]>>2]|0;o[i>>2]=t;if(!t)e=r;else{t=r;while(1){e=$T(12)|0;s=(BE(i)|0)+4|0;l=o[s+4>>2]|0;a=e+4|0;o[a>>2]=o[s>>2];o[a+4>>2]=l;o[t>>2]=e;a=o[o[i>>2]>>2]|0;o[i>>2]=a;if(!a)break;else t=e}}o[e>>2]=o[n>>2];o[n>>2]=r}h=u;return}function OE(e,t,n){e=e|0;t=t|0;n=n|0;IE(e,t,n);return}function PE(e){e=e|0;return e+24|0}function IE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+32|0;a=r+24|0;i=r+16|0;l=r+12|0;u=r;Dk(i);e=Eu(e)|0;o[l>>2]=o[t>>2];Hw(u,n);o[a>>2]=o[l>>2];NE(e,a,u);zw(u);Ck(i);h=r;return}function NE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0;r=h;h=h+32|0;a=r+16|0;l=r+12|0;i=r;u=Cu(ME()|0)|0;o[l>>2]=o[t>>2];o[a>>2]=o[l>>2];t=$w(a)|0;o[i>>2]=o[n>>2];a=n+4|0;o[i+4>>2]=o[a>>2];l=n+8|0;o[i+8>>2]=o[l>>2];o[l>>2]=0;o[a>>2]=0;o[n>>2]=0;ke(0,u|0,e|0,t|0,Xw(i)|0)|0;zw(i);h=r;return}function ME(){var e=0;if(!(r[7976]|0)){RE(10720);e=7976;o[e>>2]=1;o[e+4>>2]=0}return 10720}function RE(e){e=e|0;Lu(e,FE()|0,2);return}function FE(){return 1732}function LE(e){e=e|0;return o[e>>2]|0}function BE(e){e=e|0;return o[e>>2]|0}function jE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+32|0;u=r+16|0;i=r+8|0;a=r;Dk(i);e=Eu(e)|0;o[a>>2]=o[t>>2];n=o[n>>2]|0;o[u>>2]=o[a>>2];UE(e,u,n);Ck(i);h=r;return}function UE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+16|0;u=r+4|0;a=r;i=Cu(zE()|0)|0;o[a>>2]=o[t>>2];o[u>>2]=o[a>>2];t=$w(u)|0;ke(0,i|0,e|0,t|0,Yw(n)|0)|0;h=r;return}function zE(){var e=0;if(!(r[7984]|0)){WE(10732);e=7984;o[e>>2]=1;o[e+4>>2]=0}return 10732}function WE(e){e=e|0;Lu(e,HE()|0,2);return}function HE(){return 1744}function VE(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0;r=h;h=h+32|0;u=r+16|0;i=r+8|0;a=r;Dk(i);e=Eu(e)|0;o[a>>2]=o[t>>2];n=o[n>>2]|0;o[u>>2]=o[a>>2];UE(e,u,n);Ck(i);h=r;return}function qE(e,t,n,i){e=e|0;t=t|0;n=n|0;i=i|0;var u=0,a=0,l=0,s=0;u=h;h=h+32|0;l=u+16|0;a=u+8|0;s=u;Dk(a);e=Eu(e)|0;o[s>>2]=o[t>>2];n=r[n>>0]|0;i=r[i>>0]|0;o[l>>2]=o[s>>2];GE(e,l,n,i);Ck(a);h=u;return}function GE(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;a=i+4|0;l=i;u=Cu($E()|0)|0;o[l>>2]=o[t>>2];o[a>>2]=o[l>>2];t=$w(a)|0;n=YE(n)|0;nt(0,u|0,e|0,t|0,n|0,YE(r)|0)|0;h=i;return}function $E(){var e=0;if(!(r[7992]|0)){XE(10744);e=7992;o[e>>2]=1;o[e+4>>2]=0}return 10744}function YE(e){e=e|0;return KE(e)|0}function KE(e){e=e|0;return e&255|0}function XE(e){e=e|0;Lu(e,QE()|0,3);return}function QE(){return 1756}function JE(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0;v=h;h=h+32|0;s=v+8|0;c=v+4|0;f=v+20|0;d=v;Vs(e,0);i=_k(t)|0;o[s>>2]=0;p=s+4|0;o[p>>2]=0;o[s+8>>2]=0;switch(i<<24>>24){case 0:{r[f>>0]=0;ZE(c,n,f);eD(e,c)|0;Zi(c);break}case 8:{p=yk(t)|0;r[f>>0]=8;gk(d,o[p+4>>2]|0);tD(c,n,f,d,p+8|0);eD(e,c)|0;Zi(c);break}case 9:{a=yk(t)|0;t=o[a+4>>2]|0;if(t|0){l=s+8|0;u=a+12|0;while(1){t=t+-1|0;gk(c,o[u>>2]|0);i=o[p>>2]|0;if(i>>>0<(o[l>>2]|0)>>>0){o[i>>2]=o[c>>2];o[p>>2]=(o[p>>2]|0)+4}else Rw(s,c);if(!t)break;else u=u+4|0}}r[f>>0]=9;gk(d,o[a+8>>2]|0);nD(c,n,f,d,s);eD(e,c)|0;Zi(c);break}default:{p=yk(t)|0;r[f>>0]=i;gk(d,o[p+4>>2]|0);rD(c,n,f,d);eD(e,c)|0;Zi(c)}}zw(s);h=v;return}function ZE(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,o=0;i=h;h=h+16|0;o=i;Dk(o);t=Eu(t)|0;gD(e,t,r[n>>0]|0);Ck(o);h=i;return}function eD(e,t){e=e|0;t=t|0;var n=0;n=o[e>>2]|0;if(n|0)rt(n|0);o[e>>2]=o[t>>2];o[t>>2]=0;return e|0}function tD(e,t,n,i,u){e=e|0;t=t|0;n=n|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0;a=h;h=h+32|0;s=a+16|0;l=a+8|0;c=a;Dk(l);t=Eu(t)|0;n=r[n>>0]|0;o[c>>2]=o[i>>2];u=o[u>>2]|0;o[s>>2]=o[c>>2];pD(e,t,n,s,u);Ck(l);h=a;return}function nD(e,t,n,i,u){e=e|0;t=t|0;n=n|0;i=i|0;u=u|0;var a=0,l=0,s=0,c=0,f=0;a=h;h=h+32|0;c=a+24|0;l=a+16|0;f=a+12|0;s=a;Dk(l);t=Eu(t)|0;n=r[n>>0]|0;o[f>>2]=o[i>>2];Hw(s,u);o[c>>2]=o[f>>2];sD(e,t,n,c,s);zw(s);Ck(l);h=a;return}function rD(e,t,n,i){e=e|0;t=t|0;n=n|0;i=i|0;var u=0,a=0,l=0,s=0;u=h;h=h+32|0;l=u+16|0;a=u+8|0;s=u;Dk(a);t=Eu(t)|0;n=r[n>>0]|0;o[s>>2]=o[i>>2];o[l>>2]=o[s>>2];iD(e,t,n,l);Ck(a);h=u;return}function iD(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0,a=0,l=0;i=h;h=h+16|0;u=i+4|0;l=i;a=Cu(oD()|0)|0;n=YE(n)|0;o[l>>2]=o[r>>2];o[u>>2]=o[l>>2];uD(e,ke(0,a|0,t|0,n|0,$w(u)|0)|0);h=i;return}function oD(){var e=0;if(!(r[8e3]|0)){aD(10756);e=8e3;o[e>>2]=1;o[e+4>>2]=0}return 10756}function uD(e,t){e=e|0;t=t|0;Vs(e,t);return}function aD(e){e=e|0;Lu(e,lD()|0,2);return}function lD(){return 1772}function sD(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0,c=0;u=h;h=h+32|0;s=u+16|0;c=u+12|0;a=u;l=Cu(cD()|0)|0;n=YE(n)|0;o[c>>2]=o[r>>2];o[s>>2]=o[c>>2];r=$w(s)|0;o[a>>2]=o[i>>2];s=i+4|0;o[a+4>>2]=o[s>>2];c=i+8|0;o[a+8>>2]=o[c>>2];o[c>>2]=0;o[s>>2]=0;o[i>>2]=0;uD(e,nt(0,l|0,t|0,n|0,r|0,Xw(a)|0)|0);zw(a);h=u;return}function cD(){var e=0;if(!(r[8008]|0)){fD(10768);e=8008;o[e>>2]=1;o[e+4>>2]=0}return 10768}function fD(e){e=e|0;Lu(e,dD()|0,3);return}function dD(){return 1784}function pD(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0;u=h;h=h+16|0;l=u+4|0;s=u;a=Cu(hD()|0)|0;n=YE(n)|0;o[s>>2]=o[r>>2];o[l>>2]=o[s>>2];r=$w(l)|0;uD(e,nt(0,a|0,t|0,n|0,r|0,Kw(i)|0)|0);h=u;return}function hD(){var e=0;if(!(r[8016]|0)){vD(10780);e=8016;o[e>>2]=1;o[e+4>>2]=0}return 10780}function vD(e){e=e|0;Lu(e,mD()|0,3);return}function mD(){return 1800}function gD(e,t,n){e=e|0;t=t|0;n=n|0;var r=0;r=Cu(yD()|0)|0;uD(e,it(0,r|0,t|0,YE(n)|0)|0);return}function yD(){var e=0;if(!(r[8024]|0)){_D(10792);e=8024;o[e>>2]=1;o[e+4>>2]=0}return 10792}function _D(e){e=e|0;Lu(e,bD()|0,1);return}function bD(){return 1816}function wD(){ED();DD();SD();return}function ED(){o[2702]=YT(65536)|0;return}function DD(){$D(10856);return}function SD(){CD(10816);return}function CD(e){e=e|0;kD(e,5044);TD(e)|0;return}function kD(e,t){e=e|0;t=t|0;var n=0;n=nE()|0;o[e>>2]=n;zD(n,t);cw(o[e>>2]|0);return}function TD(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,xD()|0);return e|0}function xD(){var e=0;if(!(r[8032]|0)){AD(10820);Fe(64,10820,g|0)|0;e=8032;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(10820)|0))AD(10820);return 10820}function AD(e){e=e|0;ID(e);s_(e,25);return}function OD(e){e=e|0;PD(e+24|0);return}function PD(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function ID(e){e=e|0;var t=0;t=Za()|0;nl(e,5,18,t,LD()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ND(e,t){e=e|0;t=t|0;MD(e,t);return}function MD(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;n=h;h=h+16|0;r=n;i=n+4|0;cc(i,t);o[r>>2]=fc(i,t)|0;RD(e,r);h=n;return}function RD(e,t){e=e|0;t=t|0;FD(e+4|0,o[t>>2]|0);r[e+8>>0]=1;return}function FD(e,t){e=e|0;t=t|0;o[e>>2]=t;return}function LD(){return 1824}function BD(e){e=e|0;return jD(e)|0}function jD(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0;n=h;h=h+16|0;i=n+4|0;a=n;r=UD(8)|0;t=r;l=$T(4)|0;cc(i,e);FD(l,fc(i,e)|0);u=t+4|0;o[u>>2]=l;e=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];iE(e,u,i);o[r>>2]=e;h=n;return t|0}function UD(e){e=e|0;var t=0,n=0;e=e+7&-8;if(e>>>0<=32768?(t=o[2701]|0,e>>>0<=(65536-t|0)>>>0):0){n=(o[2702]|0)+t|0;o[2701]=t+e;e=n}else{e=YT(e+8|0)|0;o[e>>2]=o[2703];o[2703]=e;e=e+8|0}return e|0}function zD(e,t){e=e|0;t=t|0;o[e>>2]=WD()|0;o[e+4>>2]=HD()|0;o[e+12>>2]=t;o[e+8>>2]=VD()|0;o[e+32>>2]=9;return}function WD(){return 11744}function HD(){return 1832}function VD(){return N_()|0}function qD(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){GD(n);KT(n)}}else if(t|0)KT(t);return}function GD(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function $D(e){e=e|0;YD(e,5052);KD(e)|0;XD(e,5058,26)|0;QD(e,5069,1)|0;JD(e,5077,10)|0;ZD(e,5087,19)|0;tS(e,5094,27)|0;return}function YD(e,t){e=e|0;t=t|0;var n=0;n=sk()|0;o[e>>2]=n;ck(n,t);cw(o[e>>2]|0);return}function KD(e){e=e|0;var t=0;t=o[e>>2]|0;r_(t,YC()|0);return e|0}function XD(e,t,n){e=e|0;t=t|0;n=n|0;TC(e,Ia(t)|0,n,0);return e|0}function QD(e,t,n){e=e|0;t=t|0;n=n|0;sC(e,Ia(t)|0,n,0);return e|0}function JD(e,t,n){e=e|0;t=t|0;n=n|0;BS(e,Ia(t)|0,n,0);return e|0}function ZD(e,t,n){e=e|0;t=t|0;n=n|0;bS(e,Ia(t)|0,n,0);return e|0}function eS(e,t){e=e|0;t=t|0;var n=0,r=0;e:while(1){n=o[2703]|0;while(1){if((n|0)==(t|0))break e;r=o[n>>2]|0;o[2703]=r;if(!n)n=r;else break}KT(n)}o[2701]=e;return}function tS(e,t,n){e=e|0;t=t|0;n=n|0;nS(e,Ia(t)|0,n,0);return e|0}function nS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=rS()|0;e=iS(n)|0;La(u,t,i,e,oS(n,r)|0,r);return}function rS(){var e=0,t=0;if(!(r[8040]|0)){dS(10860);Fe(65,10860,g|0)|0;t=8040;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10860)|0)){e=10860;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));dS(10860)}return 10860}function iS(e){e=e|0;return e|0}function oS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=rS()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){uS(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{aS(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function uS(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function aS(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=lS(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;sS(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;uS(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;cS(e,i);fS(i);h=l;return}}function lS(e){e=e|0;return 536870911}function sS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function cS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function fS(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function dS(e){e=e|0;vS(e);return}function pS(e){e=e|0;hS(e+24|0);return}function hS(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function vS(e){e=e|0;var t=0;t=Za()|0;nl(e,1,11,t,mS()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function mS(){return 1840}function gS(e,t,n){e=e|0;t=t|0;n=n|0;_S(o[(yS(e)|0)>>2]|0,t,n);return}function yS(e){e=e|0;return(o[(rS()|0)+24>>2]|0)+(e<<3)|0}function _S(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,o=0;r=h;h=h+16|0;o=r+1|0;i=r;cc(o,t);t=fc(o,t)|0;cc(i,n);n=fc(i,n)|0;vA[e&31](t,n);h=r;return}function bS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=wS()|0;e=ES(n)|0;La(u,t,i,e,DS(n,r)|0,r);return}function wS(){var e=0,t=0;if(!(r[8048]|0)){OS(10896);Fe(66,10896,g|0)|0;t=8048;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10896)|0)){e=10896;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));OS(10896)}return 10896}function ES(e){e=e|0;return e|0}function DS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=wS()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){SS(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{CS(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function SS(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function CS(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=kS(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;TS(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;SS(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;xS(e,i);AS(i);h=l;return}}function kS(e){e=e|0;return 536870911}function TS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function xS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function AS(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function OS(e){e=e|0;NS(e);return}function PS(e){e=e|0;IS(e+24|0);return}function IS(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function NS(e){e=e|0;var t=0;t=Za()|0;nl(e,1,11,t,MS()|0,1);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function MS(){return 1852}function RS(e,t){e=e|0;t=t|0;return LS(o[(FS(e)|0)>>2]|0,t)|0}function FS(e){e=e|0;return(o[(wS()|0)+24>>2]|0)+(e<<3)|0}function LS(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;cc(r,t);t=fc(r,t)|0;t=Jc(mA[e&31](t)|0)|0;h=n;return t|0}function BS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=jS()|0;e=US(n)|0;La(u,t,i,e,zS(n,r)|0,r);return}function jS(){var e=0,t=0;if(!(r[8056]|0)){YS(10932);Fe(67,10932,g|0)|0;t=8056;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10932)|0)){e=10932;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));YS(10932)}return 10932}function US(e){e=e|0;return e|0}function zS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=jS()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){WS(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{HS(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function WS(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function HS(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=VS(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;qS(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;WS(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;GS(e,i);$S(i);h=l;return}}function VS(e){e=e|0;return 536870911}function qS(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function GS(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function $S(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function YS(e){e=e|0;QS(e);return}function KS(e){e=e|0;XS(e+24|0);return}function XS(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function QS(e){e=e|0;var t=0;t=Za()|0;nl(e,1,7,t,JS()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function JS(){return 1860}function ZS(e,t,n){e=e|0;t=t|0;n=n|0;return tC(o[(eC(e)|0)>>2]|0,t,n)|0}function eC(e){e=e|0;return(o[(jS()|0)+24>>2]|0)+(e<<3)|0}function tC(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0;r=h;h=h+32|0;a=r+12|0;u=r+8|0;l=r;s=r+16|0;i=r+4|0;nC(s,t);rC(l,s,t);Us(i,n);n=zs(i,n)|0;o[a>>2]=o[l>>2];PA[e&15](u,a,n);n=iC(u)|0;Zi(u);Ws(i);h=r;return n|0}function nC(e,t){e=e|0;t=t|0;return}function rC(e,t,n){e=e|0;t=t|0;n=n|0;oC(e,n);return}function iC(e){e=e|0;return Eu(e)|0}function oC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0;i=h;h=h+16|0;n=i;r=t;if(!(r&1))o[e>>2]=o[t>>2];else{uC(n,0);Be(r|0,n|0)|0;aC(e,n);lC(n)}h=i;return}function uC(e,t){e=e|0;t=t|0;Iu(e,t);o[e+4>>2]=0;r[e+8>>0]=0;return}function aC(e,t){e=e|0;t=t|0;o[e>>2]=o[t+4>>2];return}function lC(e){e=e|0;r[e+8>>0]=0;return}function sC(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=cC()|0;e=fC(n)|0;La(u,t,i,e,dC(n,r)|0,r);return}function cC(){var e=0,t=0;if(!(r[8064]|0)){_C(10968);Fe(68,10968,g|0)|0;t=8064;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(10968)|0)){e=10968;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));_C(10968)}return 10968}function fC(e){e=e|0;return e|0}function dC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=cC()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){pC(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{hC(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function pC(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function hC(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=vC(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;mC(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;pC(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;gC(e,i);yC(i);h=l;return}}function vC(e){e=e|0;return 536870911}function mC(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function gC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function yC(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function _C(e){e=e|0;EC(e);return}function bC(e){e=e|0;wC(e+24|0);return}function wC(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function EC(e){e=e|0;var t=0;t=Za()|0;nl(e,1,1,t,DC()|0,5);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function DC(){return 1872}function SC(e,t,n,r,i,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;u=u|0;kC(o[(CC(e)|0)>>2]|0,t,n,r,i,u);return}function CC(e){e=e|0;return(o[(cC()|0)+24>>2]|0)+(e<<3)|0}function kC(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;var u=0,a=0,l=0,s=0,c=0,f=0;u=h;h=h+32|0;a=u+16|0;l=u+12|0;s=u+8|0;c=u+4|0;f=u;Us(a,t);t=zs(a,t)|0;Us(l,n);n=zs(l,n)|0;Us(s,r);r=zs(s,r)|0;Us(c,i);i=zs(c,i)|0;Us(f,o);o=zs(f,o)|0;cA[e&1](t,n,r,i,o);Ws(f);Ws(c);Ws(s);Ws(l);Ws(a);h=u;return}function TC(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=o[e>>2]|0;i=xC()|0;e=AC(n)|0;La(u,t,i,e,OC(n,r)|0,r);return}function xC(){var e=0,t=0;if(!(r[8072]|0)){LC(11004);Fe(69,11004,g|0)|0;t=8072;o[t>>2]=1;o[t+4>>2]=0}if(!(Xa(11004)|0)){e=11004;t=e+36|0;do{o[e>>2]=0;e=e+4|0}while((e|0)<(t|0));LC(11004)}return 11004}function AC(e){e=e|0;return e|0}function OC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0,l=0,s=0;l=h;h=h+16|0;i=l;u=l+4|0;o[i>>2]=e;s=xC()|0;a=s+24|0;t=za(t,4)|0;o[u>>2]=t;n=s+28|0;r=o[n>>2]|0;if(r>>>0<(o[s+32>>2]|0)>>>0){PC(r,e,t);t=(o[n>>2]|0)+8|0;o[n>>2]=t}else{IC(a,i,u);t=o[n>>2]|0}h=l;return(t-(o[a>>2]|0)>>3)+-1|0}function PC(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;o[e+4>>2]=n;return}function IC(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0;l=h;h=h+32|0;i=l;u=e+4|0;a=((o[u>>2]|0)-(o[e>>2]|0)>>3)+1|0;r=NC(e)|0;if(r>>>0>>0)UT(e);else{s=o[e>>2]|0;f=(o[e+8>>2]|0)-s|0;c=f>>2;MC(i,f>>3>>>0>>1>>>0?c>>>0>>0?a:c:r,(o[u>>2]|0)-s>>3,e+8|0);a=i+8|0;PC(o[a>>2]|0,o[t>>2]|0,o[n>>2]|0);o[a>>2]=(o[a>>2]|0)+8;RC(e,i);FC(i);h=l;return}}function NC(e){e=e|0;return 536870911}function MC(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0;o[e+12>>2]=0;o[e+16>>2]=r;do{if(t){if(t>>>0>536870911)Ye();else{i=$T(t<<3)|0;break}}else i=0}while(0);o[e>>2]=i;r=i+(n<<3)|0;o[e+8>>2]=r;o[e+4>>2]=r;o[e+12>>2]=i+(t<<3);return}function RC(e,t){e=e|0;t=t|0;var n=0,r=0,i=0,u=0,a=0;r=o[e>>2]|0;a=e+4|0;u=t+4|0;i=(o[a>>2]|0)-r|0;n=(o[u>>2]|0)+(0-(i>>3)<<3)|0;o[u>>2]=n;if((i|0)>0){ix(n|0,r|0,i|0)|0;r=u;n=o[u>>2]|0}else r=u;u=o[e>>2]|0;o[e>>2]=n;o[r>>2]=u;u=t+8|0;i=o[a>>2]|0;o[a>>2]=o[u>>2];o[u>>2]=i;u=e+8|0;a=t+12|0;e=o[u>>2]|0;o[u>>2]=o[a>>2];o[a>>2]=e;o[t>>2]=o[r>>2];return}function FC(e){e=e|0;var t=0,n=0,r=0;t=o[e+4>>2]|0;n=e+8|0;r=o[n>>2]|0;if((r|0)!=(t|0))o[n>>2]=r+(~((r+-8-t|0)>>>3)<<3);e=o[e>>2]|0;if(e|0)KT(e);return}function LC(e){e=e|0;UC(e);return}function BC(e){e=e|0;jC(e+24|0);return}function jC(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function UC(e){e=e|0;var t=0;t=Za()|0;nl(e,1,12,t,zC()|0,2);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function zC(){return 1896}function WC(e,t,n){e=e|0;t=t|0;n=n|0;VC(o[(HC(e)|0)>>2]|0,t,n);return}function HC(e){e=e|0;return(o[(xC()|0)+24>>2]|0)+(e<<3)|0}function VC(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,o=0;r=h;h=h+16|0;o=r+4|0;i=r;qC(o,t);t=GC(o,t)|0;Us(i,n);n=zs(i,n)|0;vA[e&31](t,n);Ws(i);h=r;return}function qC(e,t){e=e|0;t=t|0;return}function GC(e,t){e=e|0;t=t|0;return $C(t)|0}function $C(e){e=e|0;return e|0}function YC(){var e=0;if(!(r[8080]|0)){KC(11040);Fe(70,11040,g|0)|0;e=8080;o[e>>2]=1;o[e+4>>2]=0}if(!(Xa(11040)|0))KC(11040);return 11040}function KC(e){e=e|0;JC(e);s_(e,71);return}function XC(e){e=e|0;QC(e+24|0);return}function QC(e){e=e|0;var t=0,n=0,r=0;n=o[e>>2]|0;r=n;if(n|0){e=e+4|0;t=o[e>>2]|0;if((t|0)!=(n|0))o[e>>2]=t+(~((t+-8-r|0)>>>3)<<3);KT(n)}return}function JC(e){e=e|0;var t=0;t=Za()|0;nl(e,5,7,t,nk()|0,0);o[e+24>>2]=0;o[e+28>>2]=0;o[e+32>>2]=0;return}function ZC(e){e=e|0;ek(e);return}function ek(e){e=e|0;tk(e);return}function tk(e){e=e|0;r[e+8>>0]=1;return}function nk(){return 1936}function rk(){return ik()|0}function ik(){var e=0,t=0,n=0,r=0,i=0,u=0,a=0;t=h;h=h+16|0;i=t+4|0;a=t;n=UD(8)|0;e=n;u=e+4|0;o[u>>2]=$T(1)|0;r=$T(8)|0;u=o[u>>2]|0;o[a>>2]=0;o[i>>2]=o[a>>2];ok(r,u,i);o[n>>2]=r;h=t;return e|0}function ok(e,t,n){e=e|0;t=t|0;n=n|0;o[e>>2]=t;n=$T(16)|0;o[n+4>>2]=0;o[n+8>>2]=0;o[n>>2]=1916;o[n+12>>2]=t;o[e+4>>2]=n;return}function uk(e){e=e|0;zT(e);KT(e);return}function ak(e){e=e|0;e=o[e+12>>2]|0;if(e|0)KT(e);return}function lk(e){e=e|0;KT(e);return}function sk(){var e=0;if(!(r[8088]|0)){mk(11076);Fe(25,11076,g|0)|0;e=8088;o[e>>2]=1;o[e+4>>2]=0}return 11076}function ck(e,t){e=e|0;t=t|0;o[e>>2]=fk()|0;o[e+4>>2]=dk()|0;o[e+12>>2]=t;o[e+8>>2]=pk()|0;o[e+32>>2]=10;return}function fk(){return 11745}function dk(){return 1940}function pk(){return Wm()|0}function hk(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;if((Um(r,896)|0)==512){if(n|0){vk(n);KT(n)}}else if(t|0)KT(t);return}function vk(e){e=e|0;e=o[e+4>>2]|0;if(e|0)qT(e);return}function mk(e){e=e|0;Al(e);return}function gk(e,t){e=e|0;t=t|0;o[e>>2]=t;return}function yk(e){e=e|0;return o[e>>2]|0}function _k(e){e=e|0;return r[o[e>>2]>>0]|0}function bk(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;o[r>>2]=o[e>>2];wk(t,r)|0;h=n;return}function wk(e,t){e=e|0;t=t|0;var n=0;n=Ek(o[e>>2]|0,t)|0;t=e+4|0;o[(o[t>>2]|0)+8>>2]=n;return o[(o[t>>2]|0)+8>>2]|0}function Ek(e,t){e=e|0;t=t|0;var n=0,r=0;n=h;h=h+16|0;r=n;Dk(r);e=Eu(e)|0;t=Sk(e,o[t>>2]|0)|0;Ck(r);h=n;return t|0}function Dk(e){e=e|0;o[e>>2]=o[2701];o[e+4>>2]=o[2703];return}function Sk(e,t){e=e|0;t=t|0;var n=0;n=Cu(kk()|0)|0;return it(0,n|0,e|0,Kw(t)|0)|0}function Ck(e){e=e|0;eS(o[e>>2]|0,o[e+4>>2]|0);return}function kk(){var e=0;if(!(r[8096]|0)){Tk(11120);e=8096;o[e>>2]=1;o[e+4>>2]=0}return 11120}function Tk(e){e=e|0;Lu(e,xk()|0,1);return}function xk(){return 1948}function Ak(){Ok();return}function Ok(){var e=0,t=0,n=0,i=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0;y=h;h=h+16|0;p=y+4|0;v=y;Ne(65536,10804,o[2702]|0,10812);n=Cw()|0;t=o[n>>2]|0;e=o[t>>2]|0;if(e|0){i=o[n+8>>2]|0;n=o[n+4>>2]|0;while(1){ze(e|0,u[n>>0]|0|0,r[i>>0]|0);t=t+4|0;e=o[t>>2]|0;if(!e)break;else{i=i+1|0;n=n+1|0}}}e=Tw()|0;t=o[e>>2]|0;if(t|0)do{We(t|0,o[e+4>>2]|0);e=e+8|0;t=o[e>>2]|0}while((t|0)!=0);We(Pk()|0,5167);d=fw()|0;e=o[d>>2]|0;e:do{if(e|0){do{Ik(o[e+4>>2]|0);e=o[e>>2]|0}while((e|0)!=0);e=o[d>>2]|0;if(e|0){f=d;do{while(1){a=e;e=o[e>>2]|0;a=o[a+4>>2]|0;if(!(Nk(a)|0))break;o[v>>2]=f;o[p>>2]=o[v>>2];Mk(d,p)|0;if(!e)break e}Rk(a);f=o[f>>2]|0;t=Fk(a)|0;l=Xe()|0;s=h;h=h+((1*(t<<2)|0)+15&-16)|0;c=h;h=h+((1*(t<<2)|0)+15&-16)|0;t=o[(xE(a)|0)>>2]|0;if(t|0){n=s;i=c;while(1){o[n>>2]=o[(kE(o[t+4>>2]|0)|0)>>2];o[i>>2]=o[t+8>>2];t=o[t>>2]|0;if(!t)break;else{n=n+4|0;i=i+4|0}}}_=kE(a)|0;t=Lk(a)|0;n=Fk(a)|0;i=Bk(a)|0;Ge(_|0,t|0,s|0,c|0,n|0,i|0,Ew(a)|0);Re(l|0)}while((e|0)!=0)}}}while(0);e=o[(Sw()|0)>>2]|0;if(e|0)do{_=e+4|0;d=Pw(_)|0;a=Fw(d)|0;l=Iw(d)|0;s=(Nw(d)|0)+1|0;c=jk(d)|0;f=Uk(_)|0;d=Xa(d)|0;p=Bw(_)|0;v=zk(_)|0;Ve(0,a|0,l|0,s|0,c|0,f|0,d|0,p|0,v|0,Wk(_)|0);e=o[e>>2]|0}while((e|0)!=0);e=o[(fw()|0)>>2]|0;e:do{if(e|0){t:while(1){t=o[e+4>>2]|0;if(t|0?(m=o[(kE(t)|0)>>2]|0,g=o[(PE(t)|0)>>2]|0,g|0):0){n=g;do{t=n+4|0;i=Pw(t)|0;n:do{if(i|0)switch(Xa(i)|0){case 0:break t;case 4:case 3:case 2:{c=Fw(i)|0;f=Iw(i)|0;d=(Nw(i)|0)+1|0;p=jk(i)|0;v=Xa(i)|0;_=Bw(t)|0;Ve(m|0,c|0,f|0,d|0,p|0,0,v|0,_|0,zk(t)|0,Wk(t)|0);break n}case 1:{s=Fw(i)|0;c=Iw(i)|0;f=(Nw(i)|0)+1|0;d=jk(i)|0;p=Uk(t)|0;v=Xa(i)|0;_=Bw(t)|0;Ve(m|0,s|0,c|0,f|0,d|0,p|0,v|0,_|0,zk(t)|0,Wk(t)|0);break n}case 5:{d=Fw(i)|0;p=Iw(i)|0;v=(Nw(i)|0)+1|0;_=jk(i)|0;Ve(m|0,d|0,p|0,v|0,_|0,Hk(i)|0,Xa(i)|0,0,0,0);break n}default:break n}}while(0);n=o[n>>2]|0}while((n|0)!=0)}e=o[e>>2]|0;if(!e)break e}Ye()}}while(0);$e();h=y;return}function Pk(){return 11703}function Ik(e){e=e|0;r[e+40>>0]=0;return}function Nk(e){e=e|0;return(r[e+40>>0]|0)!=0|0}function Mk(e,t){e=e|0;t=t|0;t=Vk(t)|0;e=o[t>>2]|0;o[t>>2]=o[e>>2];KT(e);return o[t>>2]|0}function Rk(e){e=e|0;r[e+40>>0]=1;return}function Fk(e){e=e|0;return o[e+20>>2]|0}function Lk(e){e=e|0;return o[e+8>>2]|0}function Bk(e){e=e|0;return o[e+32>>2]|0}function jk(e){e=e|0;return o[e+4>>2]|0}function Uk(e){e=e|0;return o[e+4>>2]|0}function zk(e){e=e|0;return o[e+8>>2]|0}function Wk(e){e=e|0;return o[e+16>>2]|0}function Hk(e){e=e|0;return o[e+20>>2]|0}function Vk(e){e=e|0;return o[e>>2]|0}function qk(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0,b=0,w=0,E=0,D=0;D=h;h=h+16|0;p=D;do{if(e>>>0<245){c=e>>>0<11?16:e+11&-8;e=c>>>3;d=o[2783]|0;n=d>>>e;if(n&3|0){t=(n&1^1)+e|0;e=11172+(t<<1<<2)|0;n=e+8|0;r=o[n>>2]|0;i=r+8|0;u=o[i>>2]|0;if((e|0)==(u|0))o[2783]=d&~(1<>2]=e;o[n>>2]=u}E=t<<3;o[r+4>>2]=E|3;E=r+E+4|0;o[E>>2]=o[E>>2]|1;E=i;h=D;return E|0}f=o[2785]|0;if(c>>>0>f>>>0){if(n|0){t=2<>>12&16;t=t>>>a;n=t>>>5&8;t=t>>>n;i=t>>>2&4;t=t>>>i;e=t>>>1&2;t=t>>>e;r=t>>>1&1;r=(n|a|i|e|r)+(t>>>r)|0;t=11172+(r<<1<<2)|0;e=t+8|0;i=o[e>>2]|0;a=i+8|0;n=o[a>>2]|0;if((t|0)==(n|0)){e=d&~(1<>2]=t;o[e>>2]=n;e=d}u=(r<<3)-c|0;o[i+4>>2]=c|3;r=i+c|0;o[r+4>>2]=u|1;o[r+u>>2]=u;if(f|0){i=o[2788]|0;t=f>>>3;n=11172+(t<<1<<2)|0;t=1<>2]|0}o[e>>2]=i;o[t+12>>2]=i;o[i+8>>2]=t;o[i+12>>2]=n}o[2785]=u;o[2788]=r;E=a;h=D;return E|0}l=o[2784]|0;if(l){n=(l&0-l)+-1|0;a=n>>>12&16;n=n>>>a;u=n>>>5&8;n=n>>>u;s=n>>>2&4;n=n>>>s;r=n>>>1&2;n=n>>>r;e=n>>>1&1;e=o[11436+((u|a|s|r|e)+(n>>>e)<<2)>>2]|0;n=(o[e+4>>2]&-8)-c|0;r=o[e+16+(((o[e+16>>2]|0)==0&1)<<2)>>2]|0;if(!r){s=e;u=n}else{do{a=(o[r+4>>2]&-8)-c|0;s=a>>>0>>0;n=s?a:n;e=s?r:e;r=o[r+16+(((o[r+16>>2]|0)==0&1)<<2)>>2]|0}while((r|0)!=0);s=e;u=n}a=s+c|0;if(s>>>0>>0){i=o[s+24>>2]|0;t=o[s+12>>2]|0;do{if((t|0)==(s|0)){e=s+20|0;t=o[e>>2]|0;if(!t){e=s+16|0;t=o[e>>2]|0;if(!t){n=0;break}}while(1){n=t+20|0;r=o[n>>2]|0;if(r|0){t=r;e=n;continue}n=t+16|0;r=o[n>>2]|0;if(!r)break;else{t=r;e=n}}o[e>>2]=0;n=t}else{n=o[s+8>>2]|0;o[n+12>>2]=t;o[t+8>>2]=n;n=t}}while(0);do{if(i|0){t=o[s+28>>2]|0;e=11436+(t<<2)|0;if((s|0)==(o[e>>2]|0)){o[e>>2]=n;if(!n){o[2784]=l&~(1<>2]|0)!=(s|0)&1)<<2)>>2]=n;if(!n)break}o[n+24>>2]=i;t=o[s+16>>2]|0;if(t|0){o[n+16>>2]=t;o[t+24>>2]=n}t=o[s+20>>2]|0;if(t|0){o[n+20>>2]=t;o[t+24>>2]=n}}}while(0);if(u>>>0<16){E=u+c|0;o[s+4>>2]=E|3;E=s+E+4|0;o[E>>2]=o[E>>2]|1}else{o[s+4>>2]=c|3;o[a+4>>2]=u|1;o[a+u>>2]=u;if(f|0){r=o[2788]|0;t=f>>>3;n=11172+(t<<1<<2)|0;t=1<>2]|0}o[e>>2]=r;o[t+12>>2]=r;o[r+8>>2]=t;o[r+12>>2]=n}o[2785]=u;o[2788]=a}E=s+8|0;h=D;return E|0}else d=c}else d=c}else d=c}else if(e>>>0<=4294967231){e=e+11|0;c=e&-8;s=o[2784]|0;if(s){r=0-c|0;e=e>>>8;if(e){if(c>>>0>16777215)l=31;else{d=(e+1048320|0)>>>16&8;w=e<>>16&4;w=w<>>16&2;l=14-(f|d|l)+(w<>>15)|0;l=c>>>(l+7|0)&1|l<<1}}else l=0;n=o[11436+(l<<2)>>2]|0;e:do{if(!n){n=0;e=0;w=57}else{e=0;a=c<<((l|0)==31?0:25-(l>>>1)|0);u=0;while(1){i=(o[n+4>>2]&-8)-c|0;if(i>>>0>>0)if(!i){e=n;r=0;i=n;w=61;break e}else{e=n;r=i}i=o[n+20>>2]|0;n=o[n+16+(a>>>31<<2)>>2]|0;u=(i|0)==0|(i|0)==(n|0)?u:i;i=(n|0)==0;if(i){n=u;w=57;break}else a=a<<((i^1)&1)}}}while(0);if((w|0)==57){if((n|0)==0&(e|0)==0){e=2<>>12&16;d=d>>>a;u=d>>>5&8;d=d>>>u;l=d>>>2&4;d=d>>>l;f=d>>>1&2;d=d>>>f;n=d>>>1&1;e=0;n=o[11436+((u|a|l|f|n)+(d>>>n)<<2)>>2]|0}if(!n){l=e;a=r}else{i=n;w=61}}if((w|0)==61)while(1){w=0;n=(o[i+4>>2]&-8)-c|0;d=n>>>0>>0;n=d?n:r;e=d?i:e;i=o[i+16+(((o[i+16>>2]|0)==0&1)<<2)>>2]|0;if(!i){l=e;a=n;break}else{r=n;w=61}}if((l|0)!=0?a>>>0<((o[2785]|0)-c|0)>>>0:0){u=l+c|0;if(l>>>0>=u>>>0){E=0;h=D;return E|0}i=o[l+24>>2]|0;t=o[l+12>>2]|0;do{if((t|0)==(l|0)){e=l+20|0;t=o[e>>2]|0;if(!t){e=l+16|0;t=o[e>>2]|0;if(!t){t=0;break}}while(1){n=t+20|0;r=o[n>>2]|0;if(r|0){t=r;e=n;continue}n=t+16|0;r=o[n>>2]|0;if(!r)break;else{t=r;e=n}}o[e>>2]=0}else{E=o[l+8>>2]|0;o[E+12>>2]=t;o[t+8>>2]=E}}while(0);do{if(i){e=o[l+28>>2]|0;n=11436+(e<<2)|0;if((l|0)==(o[n>>2]|0)){o[n>>2]=t;if(!t){r=s&~(1<>2]|0)!=(l|0)&1)<<2)>>2]=t;if(!t){r=s;break}}o[t+24>>2]=i;e=o[l+16>>2]|0;if(e|0){o[t+16>>2]=e;o[e+24>>2]=t}e=o[l+20>>2]|0;if(e){o[t+20>>2]=e;o[e+24>>2]=t;r=s}else r=s}else r=s}while(0);do{if(a>>>0>=16){o[l+4>>2]=c|3;o[u+4>>2]=a|1;o[u+a>>2]=a;t=a>>>3;if(a>>>0<256){n=11172+(t<<1<<2)|0;e=o[2783]|0;t=1<>2]|0}o[e>>2]=u;o[t+12>>2]=u;o[u+8>>2]=t;o[u+12>>2]=n;break}t=a>>>8;if(t){if(a>>>0>16777215)t=31;else{w=(t+1048320|0)>>>16&8;E=t<>>16&4;E=E<>>16&2;t=14-(b|w|t)+(E<>>15)|0;t=a>>>(t+7|0)&1|t<<1}}else t=0;n=11436+(t<<2)|0;o[u+28>>2]=t;e=u+16|0;o[e+4>>2]=0;o[e>>2]=0;e=1<>2]=u;o[u+24>>2]=n;o[u+12>>2]=u;o[u+8>>2]=u;break}e=a<<((t|0)==31?0:25-(t>>>1)|0);n=o[n>>2]|0;while(1){if((o[n+4>>2]&-8|0)==(a|0)){w=97;break}r=n+16+(e>>>31<<2)|0;t=o[r>>2]|0;if(!t){w=96;break}else{e=e<<1;n=t}}if((w|0)==96){o[r>>2]=u;o[u+24>>2]=n;o[u+12>>2]=u;o[u+8>>2]=u;break}else if((w|0)==97){w=n+8|0;E=o[w>>2]|0;o[E+12>>2]=u;o[w>>2]=u;o[u+8>>2]=E;o[u+12>>2]=n;o[u+24>>2]=0;break}}else{E=a+c|0;o[l+4>>2]=E|3;E=l+E+4|0;o[E>>2]=o[E>>2]|1}}while(0);E=l+8|0;h=D;return E|0}else d=c}else d=c}else d=-1}while(0);n=o[2785]|0;if(n>>>0>=d>>>0){t=n-d|0;e=o[2788]|0;if(t>>>0>15){E=e+d|0;o[2788]=E;o[2785]=t;o[E+4>>2]=t|1;o[E+t>>2]=t;o[e+4>>2]=d|3}else{o[2785]=0;o[2788]=0;o[e+4>>2]=n|3;E=e+n+4|0;o[E>>2]=o[E>>2]|1}E=e+8|0;h=D;return E|0}a=o[2786]|0;if(a>>>0>d>>>0){b=a-d|0;o[2786]=b;E=o[2789]|0;w=E+d|0;o[2789]=w;o[w+4>>2]=b|1;o[E+4>>2]=d|3;E=E+8|0;h=D;return E|0}if(!(o[2901]|0)){o[2903]=4096;o[2902]=4096;o[2904]=-1;o[2905]=-1;o[2906]=0;o[2894]=0;e=p&-16^1431655768;o[p>>2]=e;o[2901]=e;e=4096}else e=o[2903]|0;l=d+48|0;s=d+47|0;u=e+s|0;i=0-e|0;c=u&i;if(c>>>0<=d>>>0){E=0;h=D;return E|0}e=o[2893]|0;if(e|0?(f=o[2891]|0,p=f+c|0,p>>>0<=f>>>0|p>>>0>e>>>0):0){E=0;h=D;return E|0}e:do{if(!(o[2894]&4)){n=o[2789]|0;t:do{if(n){r=11580;while(1){e=o[r>>2]|0;if(e>>>0<=n>>>0?(g=r+4|0,(e+(o[g>>2]|0)|0)>>>0>n>>>0):0)break;e=o[r+8>>2]|0;if(!e){w=118;break t}else r=e}t=u-a&i;if(t>>>0<2147483647){e=lx(t|0)|0;if((e|0)==((o[r>>2]|0)+(o[g>>2]|0)|0)){if((e|0)!=(-1|0)){a=t;u=e;w=135;break e}}else{r=e;w=126}}else t=0}else w=118}while(0);do{if((w|0)==118){n=lx(0)|0;if((n|0)!=(-1|0)?(t=n,v=o[2902]|0,m=v+-1|0,t=((m&t|0)==0?0:(m+t&0-v)-t|0)+c|0,v=o[2891]|0,m=t+v|0,t>>>0>d>>>0&t>>>0<2147483647):0){g=o[2893]|0;if(g|0?m>>>0<=v>>>0|m>>>0>g>>>0:0){t=0;break}e=lx(t|0)|0;if((e|0)==(n|0)){a=t;u=n;w=135;break e}else{r=e;w=126}}else t=0}}while(0);do{if((w|0)==126){n=0-t|0;if(!(l>>>0>t>>>0&(t>>>0<2147483647&(r|0)!=(-1|0))))if((r|0)==(-1|0)){t=0;break}else{a=t;u=r;w=135;break e}e=o[2903]|0;e=s-t+e&0-e;if(e>>>0>=2147483647){a=t;u=r;w=135;break e}if((lx(e|0)|0)==(-1|0)){lx(n|0)|0;t=0;break}else{a=e+t|0;u=r;w=135;break e}}}while(0);o[2894]=o[2894]|4;w=133}else{t=0;w=133}}while(0);if(((w|0)==133?c>>>0<2147483647:0)?(b=lx(c|0)|0,g=lx(0)|0,y=g-b|0,_=y>>>0>(d+40|0)>>>0,!((b|0)==(-1|0)|_^1|b>>>0>>0&((b|0)!=(-1|0)&(g|0)!=(-1|0))^1)):0){a=_?y:t;u=b;w=135}if((w|0)==135){t=(o[2891]|0)+a|0;o[2891]=t;if(t>>>0>(o[2892]|0)>>>0)o[2892]=t;s=o[2789]|0;do{if(s){t=11580;while(1){e=o[t>>2]|0;n=t+4|0;r=o[n>>2]|0;if((u|0)==(e+r|0)){w=145;break}i=o[t+8>>2]|0;if(!i)break;else t=i}if(((w|0)==145?(o[t+12>>2]&8|0)==0:0)?s>>>0>>0&s>>>0>=e>>>0:0){o[n>>2]=r+a;E=s+8|0;E=(E&7|0)==0?0:0-E&7;w=s+E|0;E=(o[2786]|0)+(a-E)|0;o[2789]=w;o[2786]=E;o[w+4>>2]=E|1;o[w+E+4>>2]=40;o[2790]=o[2905];break}if(u>>>0<(o[2787]|0)>>>0)o[2787]=u;n=u+a|0;t=11580;while(1){if((o[t>>2]|0)==(n|0)){w=153;break}e=o[t+8>>2]|0;if(!e)break;else t=e}if((w|0)==153?(o[t+12>>2]&8|0)==0:0){o[t>>2]=u;f=t+4|0;o[f>>2]=(o[f>>2]|0)+a;f=u+8|0;f=u+((f&7|0)==0?0:0-f&7)|0;t=n+8|0;t=n+((t&7|0)==0?0:0-t&7)|0;c=f+d|0;l=t-f-d|0;o[f+4>>2]=d|3;do{if((t|0)!=(s|0)){if((t|0)==(o[2788]|0)){E=(o[2785]|0)+l|0;o[2785]=E;o[2788]=c;o[c+4>>2]=E|1;o[c+E>>2]=E;break}e=o[t+4>>2]|0;if((e&3|0)==1){a=e&-8;r=e>>>3;e:do{if(e>>>0<256){e=o[t+8>>2]|0;n=o[t+12>>2]|0;if((n|0)==(e|0)){o[2783]=o[2783]&~(1<>2]=n;o[n+8>>2]=e;break}}else{u=o[t+24>>2]|0;e=o[t+12>>2]|0;do{if((e|0)==(t|0)){r=t+16|0;n=r+4|0;e=o[n>>2]|0;if(!e){e=o[r>>2]|0;if(!e){e=0;break}else n=r}while(1){r=e+20|0;i=o[r>>2]|0;if(i|0){e=i;n=r;continue}r=e+16|0;i=o[r>>2]|0;if(!i)break;else{e=i;n=r}}o[n>>2]=0}else{E=o[t+8>>2]|0;o[E+12>>2]=e;o[e+8>>2]=E}}while(0);if(!u)break;n=o[t+28>>2]|0;r=11436+(n<<2)|0;do{if((t|0)!=(o[r>>2]|0)){o[u+16+(((o[u+16>>2]|0)!=(t|0)&1)<<2)>>2]=e;if(!e)break e}else{o[r>>2]=e;if(e|0)break;o[2784]=o[2784]&~(1<>2]=u;n=t+16|0;r=o[n>>2]|0;if(r|0){o[e+16>>2]=r;o[r+24>>2]=e}n=o[n+4>>2]|0;if(!n)break;o[e+20>>2]=n;o[n+24>>2]=e}}while(0);t=t+a|0;i=a+l|0}else i=l;t=t+4|0;o[t>>2]=o[t>>2]&-2;o[c+4>>2]=i|1;o[c+i>>2]=i;t=i>>>3;if(i>>>0<256){n=11172+(t<<1<<2)|0;e=o[2783]|0;t=1<>2]|0}o[e>>2]=c;o[t+12>>2]=c;o[c+8>>2]=t;o[c+12>>2]=n;break}t=i>>>8;do{if(!t)t=0;else{if(i>>>0>16777215){t=31;break}w=(t+1048320|0)>>>16&8;E=t<>>16&4;E=E<>>16&2;t=14-(b|w|t)+(E<>>15)|0;t=i>>>(t+7|0)&1|t<<1}}while(0);r=11436+(t<<2)|0;o[c+28>>2]=t;e=c+16|0;o[e+4>>2]=0;o[e>>2]=0;e=o[2784]|0;n=1<>2]=c;o[c+24>>2]=r;o[c+12>>2]=c;o[c+8>>2]=c;break}e=i<<((t|0)==31?0:25-(t>>>1)|0);n=o[r>>2]|0;while(1){if((o[n+4>>2]&-8|0)==(i|0)){w=194;break}r=n+16+(e>>>31<<2)|0;t=o[r>>2]|0;if(!t){w=193;break}else{e=e<<1;n=t}}if((w|0)==193){o[r>>2]=c;o[c+24>>2]=n;o[c+12>>2]=c;o[c+8>>2]=c;break}else if((w|0)==194){w=n+8|0;E=o[w>>2]|0;o[E+12>>2]=c;o[w>>2]=c;o[c+8>>2]=E;o[c+12>>2]=n;o[c+24>>2]=0;break}}else{E=(o[2786]|0)+l|0;o[2786]=E;o[2789]=c;o[c+4>>2]=E|1}}while(0);E=f+8|0;h=D;return E|0}t=11580;while(1){e=o[t>>2]|0;if(e>>>0<=s>>>0?(E=e+(o[t+4>>2]|0)|0,E>>>0>s>>>0):0)break;t=o[t+8>>2]|0}i=E+-47|0;e=i+8|0;e=i+((e&7|0)==0?0:0-e&7)|0;i=s+16|0;e=e>>>0>>0?s:e;t=e+8|0;n=u+8|0;n=(n&7|0)==0?0:0-n&7;w=u+n|0;n=a+-40-n|0;o[2789]=w;o[2786]=n;o[w+4>>2]=n|1;o[w+n+4>>2]=40;o[2790]=o[2905];n=e+4|0;o[n>>2]=27;o[t>>2]=o[2895];o[t+4>>2]=o[2896];o[t+8>>2]=o[2897];o[t+12>>2]=o[2898];o[2895]=u;o[2896]=a;o[2898]=0;o[2897]=t;t=e+24|0;do{w=t;t=t+4|0;o[t>>2]=7}while((w+8|0)>>>0>>0);if((e|0)!=(s|0)){u=e-s|0;o[n>>2]=o[n>>2]&-2;o[s+4>>2]=u|1;o[e>>2]=u;t=u>>>3;if(u>>>0<256){n=11172+(t<<1<<2)|0;e=o[2783]|0;t=1<>2]|0}o[e>>2]=s;o[t+12>>2]=s;o[s+8>>2]=t;o[s+12>>2]=n;break}t=u>>>8;if(t){if(u>>>0>16777215)n=31;else{w=(t+1048320|0)>>>16&8;E=t<>>16&4;E=E<>>16&2;n=14-(b|w|n)+(E<>>15)|0;n=u>>>(n+7|0)&1|n<<1}}else n=0;r=11436+(n<<2)|0;o[s+28>>2]=n;o[s+20>>2]=0;o[i>>2]=0;t=o[2784]|0;e=1<>2]=s;o[s+24>>2]=r;o[s+12>>2]=s;o[s+8>>2]=s;break}e=u<<((n|0)==31?0:25-(n>>>1)|0);n=o[r>>2]|0;while(1){if((o[n+4>>2]&-8|0)==(u|0)){w=216;break}r=n+16+(e>>>31<<2)|0;t=o[r>>2]|0;if(!t){w=215;break}else{e=e<<1;n=t}}if((w|0)==215){o[r>>2]=s;o[s+24>>2]=n;o[s+12>>2]=s;o[s+8>>2]=s;break}else if((w|0)==216){w=n+8|0;E=o[w>>2]|0;o[E+12>>2]=s;o[w>>2]=s;o[s+8>>2]=E;o[s+12>>2]=n;o[s+24>>2]=0;break}}}else{E=o[2787]|0;if((E|0)==0|u>>>0>>0)o[2787]=u;o[2895]=u;o[2896]=a;o[2898]=0;o[2792]=o[2901];o[2791]=-1;t=0;do{E=11172+(t<<1<<2)|0;o[E+12>>2]=E;o[E+8>>2]=E;t=t+1|0}while((t|0)!=32);E=u+8|0;E=(E&7|0)==0?0:0-E&7;w=u+E|0;E=a+-40-E|0;o[2789]=w;o[2786]=E;o[w+4>>2]=E|1;o[w+E+4>>2]=40;o[2790]=o[2905]}}while(0);t=o[2786]|0;if(t>>>0>d>>>0){b=t-d|0;o[2786]=b;E=o[2789]|0;w=E+d|0;o[2789]=w;o[w+4>>2]=b|1;o[E+4>>2]=d|3;E=E+8|0;h=D;return E|0}}o[(Jk()|0)>>2]=12;E=0;h=D;return E|0}function Gk(e){e=e|0;var t=0,n=0,r=0,i=0,u=0,a=0,l=0,s=0;if(!e)return;n=e+-8|0;i=o[2787]|0;e=o[e+-4>>2]|0;t=e&-8;s=n+t|0;do{if(!(e&1)){r=o[n>>2]|0;if(!(e&3))return;a=n+(0-r)|0;u=r+t|0;if(a>>>0>>0)return;if((a|0)==(o[2788]|0)){e=s+4|0;t=o[e>>2]|0;if((t&3|0)!=3){l=a;t=u;break}o[2785]=u;o[e>>2]=t&-2;o[a+4>>2]=u|1;o[a+u>>2]=u;return}n=r>>>3;if(r>>>0<256){e=o[a+8>>2]|0;t=o[a+12>>2]|0;if((t|0)==(e|0)){o[2783]=o[2783]&~(1<>2]=t;o[t+8>>2]=e;l=a;t=u;break}}i=o[a+24>>2]|0;e=o[a+12>>2]|0;do{if((e|0)==(a|0)){n=a+16|0;t=n+4|0;e=o[t>>2]|0;if(!e){e=o[n>>2]|0;if(!e){e=0;break}else t=n}while(1){n=e+20|0;r=o[n>>2]|0;if(r|0){e=r;t=n;continue}n=e+16|0;r=o[n>>2]|0;if(!r)break;else{e=r;t=n}}o[t>>2]=0}else{l=o[a+8>>2]|0;o[l+12>>2]=e;o[e+8>>2]=l}}while(0);if(i){t=o[a+28>>2]|0;n=11436+(t<<2)|0;if((a|0)==(o[n>>2]|0)){o[n>>2]=e;if(!e){o[2784]=o[2784]&~(1<>2]|0)!=(a|0)&1)<<2)>>2]=e;if(!e){l=a;t=u;break}}o[e+24>>2]=i;t=a+16|0;n=o[t>>2]|0;if(n|0){o[e+16>>2]=n;o[n+24>>2]=e}t=o[t+4>>2]|0;if(t){o[e+20>>2]=t;o[t+24>>2]=e;l=a;t=u}else{l=a;t=u}}else{l=a;t=u}}else{l=n;a=n}}while(0);if(a>>>0>=s>>>0)return;e=s+4|0;r=o[e>>2]|0;if(!(r&1))return;if(!(r&2)){e=o[2788]|0;if((s|0)==(o[2789]|0)){s=(o[2786]|0)+t|0;o[2786]=s;o[2789]=l;o[l+4>>2]=s|1;if((l|0)!=(e|0))return;o[2788]=0;o[2785]=0;return}if((s|0)==(e|0)){s=(o[2785]|0)+t|0;o[2785]=s;o[2788]=a;o[l+4>>2]=s|1;o[a+s>>2]=s;return}i=(r&-8)+t|0;n=r>>>3;do{if(r>>>0<256){t=o[s+8>>2]|0;e=o[s+12>>2]|0;if((e|0)==(t|0)){o[2783]=o[2783]&~(1<>2]=e;o[e+8>>2]=t;break}}else{u=o[s+24>>2]|0;e=o[s+12>>2]|0;do{if((e|0)==(s|0)){n=s+16|0;t=n+4|0;e=o[t>>2]|0;if(!e){e=o[n>>2]|0;if(!e){n=0;break}else t=n}while(1){n=e+20|0;r=o[n>>2]|0;if(r|0){e=r;t=n;continue}n=e+16|0;r=o[n>>2]|0;if(!r)break;else{e=r;t=n}}o[t>>2]=0;n=e}else{n=o[s+8>>2]|0;o[n+12>>2]=e;o[e+8>>2]=n;n=e}}while(0);if(u|0){e=o[s+28>>2]|0;t=11436+(e<<2)|0;if((s|0)==(o[t>>2]|0)){o[t>>2]=n;if(!n){o[2784]=o[2784]&~(1<>2]|0)!=(s|0)&1)<<2)>>2]=n;if(!n)break}o[n+24>>2]=u;e=s+16|0;t=o[e>>2]|0;if(t|0){o[n+16>>2]=t;o[t+24>>2]=n}e=o[e+4>>2]|0;if(e|0){o[n+20>>2]=e;o[e+24>>2]=n}}}}while(0);o[l+4>>2]=i|1;o[a+i>>2]=i;if((l|0)==(o[2788]|0)){o[2785]=i;return}}else{o[e>>2]=r&-2;o[l+4>>2]=t|1;o[a+t>>2]=t;i=t}e=i>>>3;if(i>>>0<256){n=11172+(e<<1<<2)|0;t=o[2783]|0;e=1<>2]|0}o[t>>2]=l;o[e+12>>2]=l;o[l+8>>2]=e;o[l+12>>2]=n;return}e=i>>>8;if(e){if(i>>>0>16777215)e=31;else{a=(e+1048320|0)>>>16&8;s=e<>>16&4;s=s<>>16&2;e=14-(u|a|e)+(s<>>15)|0;e=i>>>(e+7|0)&1|e<<1}}else e=0;r=11436+(e<<2)|0;o[l+28>>2]=e;o[l+20>>2]=0;o[l+16>>2]=0;t=o[2784]|0;n=1<>>1)|0);n=o[r>>2]|0;while(1){if((o[n+4>>2]&-8|0)==(i|0)){e=73;break}r=n+16+(t>>>31<<2)|0;e=o[r>>2]|0;if(!e){e=72;break}else{t=t<<1;n=e}}if((e|0)==72){o[r>>2]=l;o[l+24>>2]=n;o[l+12>>2]=l;o[l+8>>2]=l;break}else if((e|0)==73){a=n+8|0;s=o[a>>2]|0;o[s+12>>2]=l;o[a>>2]=l;o[l+8>>2]=s;o[l+12>>2]=n;o[l+24>>2]=0;break}}else{o[2784]=t|n;o[r>>2]=l;o[l+24>>2]=r;o[l+12>>2]=l;o[l+8>>2]=l}}while(0);s=(o[2791]|0)+-1|0;o[2791]=s;if(!s)e=11588;else return;while(1){e=o[e>>2]|0;if(!e)break;else e=e+8|0}o[2791]=-1;return}function $k(){return 11628}function Yk(e){e=e|0;var t=0,n=0;t=h;h=h+16|0;n=t;o[n>>2]=tT(o[e+60>>2]|0)|0;e=Qk(ut(6,n|0)|0)|0;h=t;return e|0}function Kk(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0;d=h;h=h+48|0;c=d+16|0;u=d;i=d+32|0;l=e+28|0;r=o[l>>2]|0;o[i>>2]=r;s=e+20|0;r=(o[s>>2]|0)-r|0;o[i+4>>2]=r;o[i+8>>2]=t;o[i+12>>2]=n;r=r+n|0;a=e+60|0;o[u>>2]=o[a>>2];o[u+4>>2]=i;o[u+8>>2]=2;u=Qk(st(146,u|0)|0)|0;e:do{if((r|0)!=(u|0)){t=2;while(1){if((u|0)<0)break;r=r-u|0;v=o[i+4>>2]|0;p=u>>>0>v>>>0;i=p?i+8|0:i;t=(p<<31>>31)+t|0;v=u-(p?v:0)|0;o[i>>2]=(o[i>>2]|0)+v;p=i+4|0;o[p>>2]=(o[p>>2]|0)-v;o[c>>2]=o[a>>2];o[c+4>>2]=i;o[c+8>>2]=t;u=Qk(st(146,c|0)|0)|0;if((r|0)==(u|0)){f=3;break e}}o[e+16>>2]=0;o[l>>2]=0;o[s>>2]=0;o[e>>2]=o[e>>2]|32;if((t|0)==2)n=0;else n=n-(o[i+4>>2]|0)|0}else f=3}while(0);if((f|0)==3){v=o[e+44>>2]|0;o[e+16>>2]=v+(o[e+48>>2]|0);o[l>>2]=v;o[s>>2]=v}h=d;return n|0}function Xk(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0;i=h;h=h+32|0;u=i;r=i+20|0;o[u>>2]=o[e+60>>2];o[u+4>>2]=0;o[u+8>>2]=t;o[u+12>>2]=r;o[u+16>>2]=n;if((Qk(lt(140,u|0)|0)|0)<0){o[r>>2]=-1;e=-1}else e=o[r>>2]|0;h=i;return e|0}function Qk(e){e=e|0;if(e>>>0>4294963200){o[(Jk()|0)>>2]=0-e;e=-1}return e|0}function Jk(){return(Zk()|0)+64|0}function Zk(){return eT()|0}function eT(){return 2084}function tT(e){e=e|0;return e|0}function nT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0;u=h;h=h+32|0;i=u;o[e+36>>2]=1;if((o[e>>2]&64|0)==0?(o[i>>2]=o[e+60>>2],o[i+4>>2]=21523,o[i+8>>2]=u+16,Qe(54,i|0)|0):0)r[e+75>>0]=-1;i=Kk(e,t,n)|0;h=u;return i|0}function rT(e,t){e=e|0;t=t|0;var n=0,i=0;n=r[e>>0]|0;i=r[t>>0]|0;if(n<<24>>24==0?1:n<<24>>24!=i<<24>>24)e=i;else{do{e=e+1|0;t=t+1|0;n=r[e>>0]|0;i=r[t>>0]|0}while(!(n<<24>>24==0?1:n<<24>>24!=i<<24>>24));e=i}return(n&255)-(e&255)|0}function iT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,o=0;e:do{if(!n)e=0;else{while(1){i=r[e>>0]|0;o=r[t>>0]|0;if(i<<24>>24!=o<<24>>24)break;n=n+-1|0;if(!n){e=0;break e}else{e=e+1|0;t=t+1|0}}e=(i&255)-(o&255)|0}}while(0);return e|0}function oT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0;y=h;h=h+224|0;d=y+120|0;p=y+80|0;m=y;g=y+136|0;i=p;u=i+40|0;do{o[i>>2]=0;i=i+4|0}while((i|0)<(u|0));o[d>>2]=o[n>>2];if((uT(0,t,d,m,p)|0)<0)n=-1;else{if((o[e+76>>2]|0)>-1)v=aT(e)|0;else v=0;n=o[e>>2]|0;f=n&32;if((r[e+74>>0]|0)<1)o[e>>2]=n&-33;i=e+48|0;if(!(o[i>>2]|0)){u=e+44|0;a=o[u>>2]|0;o[u>>2]=g;l=e+28|0;o[l>>2]=g;s=e+20|0;o[s>>2]=g;o[i>>2]=80;c=e+16|0;o[c>>2]=g+80;n=uT(e,t,d,m,p)|0;if(a){_A[o[e+36>>2]&7](e,0,0)|0;n=(o[s>>2]|0)==0?-1:n;o[u>>2]=a;o[i>>2]=0;o[c>>2]=0;o[l>>2]=0;o[s>>2]=0}}else n=uT(e,t,d,m,p)|0;i=o[e>>2]|0;o[e>>2]=i|f;if(v|0)lT(e);n=(i&32|0)==0?n:-1}h=y;return n|0}function uT(e,t,n,u,a){e=e|0;t=t|0;n=n|0;u=u|0;a=a|0;var l=0,s=0,f=0,d=0,p=0,v=0,m=0,g=0,y=0,_=0,b=0,w=0,E=0,D=0,S=0,C=0,k=0,T=0,x=0,O=0,P=0,I=0,N=0;N=h;h=h+64|0;x=N+16|0;O=N;k=N+24|0;P=N+8|0;I=N+20|0;o[x>>2]=t;D=(e|0)!=0;S=k+40|0;C=S;k=k+39|0;T=P+4|0;s=0;l=0;v=0;e:while(1){do{if((l|0)>-1)if((s|0)>(2147483647-l|0)){o[(Jk()|0)>>2]=75;l=-1;break}else{l=s+l|0;break}}while(0);s=r[t>>0]|0;if(!(s<<24>>24)){E=87;break}else f=t;t:while(1){switch(s<<24>>24){case 37:{s=f;E=9;break t}case 0:{s=f;break t}default:{}}w=f+1|0;o[x>>2]=w;s=r[w>>0]|0;f=w}t:do{if((E|0)==9)while(1){E=0;if((r[f+1>>0]|0)!=37)break t;s=s+1|0;f=f+2|0;o[x>>2]=f;if((r[f>>0]|0)==37)E=9;else break}}while(0);s=s-t|0;if(D)sT(e,t,s);if(s|0){t=f;continue}d=f+1|0;s=(r[d>>0]|0)+-48|0;if(s>>>0<10){w=(r[f+2>>0]|0)==36;b=w?s:-1;v=w?1:v;d=w?f+3|0:d}else b=-1;o[x>>2]=d;s=r[d>>0]|0;f=(s<<24>>24)+-32|0;t:do{if(f>>>0<32){p=0;m=s;while(1){s=1<>2]=d;s=r[d>>0]|0;f=(s<<24>>24)+-32|0;if(f>>>0>=32)break;else m=s}}else p=0}while(0);if(s<<24>>24==42){f=d+1|0;s=(r[f>>0]|0)+-48|0;if(s>>>0<10?(r[d+2>>0]|0)==36:0){o[a+(s<<2)>>2]=10;s=o[u+((r[f>>0]|0)+-48<<3)>>2]|0;v=1;d=d+3|0}else{if(v|0){l=-1;break}if(D){v=(o[n>>2]|0)+(4-1)&~(4-1);s=o[v>>2]|0;o[n>>2]=v+4;v=0;d=f}else{s=0;v=0;d=f}}o[x>>2]=d;w=(s|0)<0;s=w?0-s|0:s;p=w?p|8192:p}else{s=cT(x)|0;if((s|0)<0){l=-1;break}d=o[x>>2]|0}do{if((r[d>>0]|0)==46){if((r[d+1>>0]|0)!=42){o[x>>2]=d+1;f=cT(x)|0;d=o[x>>2]|0;break}m=d+2|0;f=(r[m>>0]|0)+-48|0;if(f>>>0<10?(r[d+3>>0]|0)==36:0){o[a+(f<<2)>>2]=10;f=o[u+((r[m>>0]|0)+-48<<3)>>2]|0;d=d+4|0;o[x>>2]=d;break}if(v|0){l=-1;break e}if(D){w=(o[n>>2]|0)+(4-1)&~(4-1);f=o[w>>2]|0;o[n>>2]=w+4}else f=0;o[x>>2]=m;d=m}else f=-1}while(0);_=0;while(1){if(((r[d>>0]|0)+-65|0)>>>0>57){l=-1;break e}w=d+1|0;o[x>>2]=w;m=r[(r[d>>0]|0)+-65+(5178+(_*58|0))>>0]|0;g=m&255;if((g+-1|0)>>>0<8){_=g;d=w}else break}if(!(m<<24>>24)){l=-1;break}y=(b|0)>-1;do{if(m<<24>>24==19){if(y){l=-1;break e}else E=49}else{if(y){o[a+(b<<2)>>2]=g;y=u+(b<<3)|0;b=o[y+4>>2]|0;E=O;o[E>>2]=o[y>>2];o[E+4>>2]=b;E=49;break}if(!D){l=0;break e}fT(O,g,n)}}while(0);if((E|0)==49?(E=0,!D):0){s=0;t=w;continue}d=r[d>>0]|0;d=(_|0)!=0&(d&15|0)==3?d&-33:d;y=p&-65537;b=(p&8192|0)==0?p:y;t:do{switch(d|0){case 110:switch((_&255)<<24>>24){case 0:{o[o[O>>2]>>2]=l;s=0;t=w;continue e}case 1:{o[o[O>>2]>>2]=l;s=0;t=w;continue e}case 2:{s=o[O>>2]|0;o[s>>2]=l;o[s+4>>2]=((l|0)<0)<<31>>31;s=0;t=w;continue e}case 3:{i[o[O>>2]>>1]=l;s=0;t=w;continue e}case 4:{r[o[O>>2]>>0]=l;s=0;t=w;continue e}case 6:{o[o[O>>2]>>2]=l;s=0;t=w;continue e}case 7:{s=o[O>>2]|0;o[s>>2]=l;o[s+4>>2]=((l|0)<0)<<31>>31;s=0;t=w;continue e}default:{s=0;t=w;continue e}}case 112:{d=120;f=f>>>0>8?f:8;t=b|8;E=61;break}case 88:case 120:{t=b;E=61;break}case 111:{d=O;t=o[d>>2]|0;d=o[d+4>>2]|0;g=pT(t,d,S)|0;y=C-g|0;p=0;m=5642;f=(b&8|0)==0|(f|0)>(y|0)?f:y+1|0;y=b;E=67;break}case 105:case 100:{d=O;t=o[d>>2]|0;d=o[d+4>>2]|0;if((d|0)<0){t=ZT(0,0,t|0,d|0)|0;d=A;p=O;o[p>>2]=t;o[p+4>>2]=d;p=1;m=5642;E=66;break t}else{p=(b&2049|0)!=0&1;m=(b&2048|0)==0?(b&1|0)==0?5642:5644:5643;E=66;break t}}case 117:{d=O;p=0;m=5642;t=o[d>>2]|0;d=o[d+4>>2]|0;E=66;break}case 99:{r[k>>0]=o[O>>2];t=k;p=0;m=5642;g=S;d=1;f=y;break}case 109:{d=vT(o[(Jk()|0)>>2]|0)|0;E=71;break}case 115:{d=o[O>>2]|0;d=d|0?d:5652;E=71;break}case 67:{o[P>>2]=o[O>>2];o[T>>2]=0;o[O>>2]=P;g=-1;d=P;E=75;break}case 83:{t=o[O>>2]|0;if(!f){gT(e,32,s,0,b);t=0;E=84}else{g=f;d=t;E=75}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{s=_T(e,+c[O>>3],s,f,b,d)|0;t=w;continue e}default:{p=0;m=5642;g=S;d=f;f=b}}}while(0);t:do{if((E|0)==61){b=O;_=o[b>>2]|0;b=o[b+4>>2]|0;g=dT(_,b,S,d&32)|0;m=(t&8|0)==0|(_|0)==0&(b|0)==0;p=m?0:2;m=m?5642:5642+(d>>4)|0;y=t;t=_;d=b;E=67}else if((E|0)==66){g=hT(t,d,S)|0;y=b;E=67}else if((E|0)==71){E=0;b=mT(d,0,f)|0;_=(b|0)==0;t=d;p=0;m=5642;g=_?d+f|0:b;d=_?f:b-d|0;f=y}else if((E|0)==75){E=0;m=d;t=0;f=0;while(1){p=o[m>>2]|0;if(!p)break;f=yT(I,p)|0;if((f|0)<0|f>>>0>(g-t|0)>>>0)break;t=f+t|0;if(g>>>0>t>>>0)m=m+4|0;else break}if((f|0)<0){l=-1;break e}gT(e,32,s,t,b);if(!t){t=0;E=84}else{p=0;while(1){f=o[d>>2]|0;if(!f){E=84;break t}f=yT(I,f)|0;p=f+p|0;if((p|0)>(t|0)){E=84;break t}sT(e,I,f);if(p>>>0>=t>>>0){E=84;break}else d=d+4|0}}}}while(0);if((E|0)==67){E=0;d=(t|0)!=0|(d|0)!=0;b=(f|0)!=0|d;d=((d^1)&1)+(C-g)|0;t=b?g:S;g=S;d=b?(f|0)>(d|0)?f:d:f;f=(f|0)>-1?y&-65537:y}else if((E|0)==84){E=0;gT(e,32,s,t,b^8192);s=(s|0)>(t|0)?s:t;t=w;continue}_=g-t|0;y=(d|0)<(_|0)?_:d;b=y+p|0;s=(s|0)<(b|0)?b:s;gT(e,32,s,b,f);sT(e,m,p);gT(e,48,s,b,f^65536);gT(e,48,y,_,0);sT(e,t,_);gT(e,32,s,b,f^8192);t=w}e:do{if((E|0)==87)if(!e)if(!v)l=0;else{l=1;while(1){t=o[a+(l<<2)>>2]|0;if(!t)break;fT(u+(l<<3)|0,t,n);l=l+1|0;if((l|0)>=10){l=1;break e}}while(1){if(o[a+(l<<2)>>2]|0){l=-1;break e}l=l+1|0;if((l|0)>=10){l=1;break}}}}while(0);h=N;return l|0}function aT(e){e=e|0;return 0}function lT(e){e=e|0;return}function sT(e,t,n){e=e|0;t=t|0;n=n|0;if(!(o[e>>2]&32))PT(t,n,e)|0;return}function cT(e){e=e|0;var t=0,n=0,i=0;n=o[e>>2]|0;i=(r[n>>0]|0)+-48|0;if(i>>>0<10){t=0;do{t=i+(t*10|0)|0;n=n+1|0;o[e>>2]=n;i=(r[n>>0]|0)+-48|0}while(i>>>0<10)}else t=0;return t|0}function fT(e,t,n){e=e|0;t=t|0;n=n|0;var r=0,i=0,u=0.0;e:do{if(t>>>0<=20)do{switch(t|0){case 9:{r=(o[n>>2]|0)+(4-1)&~(4-1);t=o[r>>2]|0;o[n>>2]=r+4;o[e>>2]=t;break e}case 10:{r=(o[n>>2]|0)+(4-1)&~(4-1);t=o[r>>2]|0;o[n>>2]=r+4;r=e;o[r>>2]=t;o[r+4>>2]=((t|0)<0)<<31>>31;break e}case 11:{r=(o[n>>2]|0)+(4-1)&~(4-1);t=o[r>>2]|0;o[n>>2]=r+4;r=e;o[r>>2]=t;o[r+4>>2]=0;break e}case 12:{r=(o[n>>2]|0)+(8-1)&~(8-1);t=r;i=o[t>>2]|0;t=o[t+4>>2]|0;o[n>>2]=r+8;r=e;o[r>>2]=i;o[r+4>>2]=t;break e}case 13:{i=(o[n>>2]|0)+(4-1)&~(4-1);r=o[i>>2]|0;o[n>>2]=i+4;r=(r&65535)<<16>>16;i=e;o[i>>2]=r;o[i+4>>2]=((r|0)<0)<<31>>31;break e}case 14:{i=(o[n>>2]|0)+(4-1)&~(4-1);r=o[i>>2]|0;o[n>>2]=i+4;i=e;o[i>>2]=r&65535;o[i+4>>2]=0;break e}case 15:{i=(o[n>>2]|0)+(4-1)&~(4-1);r=o[i>>2]|0;o[n>>2]=i+4;r=(r&255)<<24>>24;i=e;o[i>>2]=r;o[i+4>>2]=((r|0)<0)<<31>>31;break e}case 16:{i=(o[n>>2]|0)+(4-1)&~(4-1);r=o[i>>2]|0;o[n>>2]=i+4;i=e;o[i>>2]=r&255;o[i+4>>2]=0;break e}case 17:{i=(o[n>>2]|0)+(8-1)&~(8-1);u=+c[i>>3];o[n>>2]=i+8;c[e>>3]=u;break e}case 18:{i=(o[n>>2]|0)+(8-1)&~(8-1);u=+c[i>>3];o[n>>2]=i+8;c[e>>3]=u;break e}default:break e}}while(0)}while(0);return}function dT(e,t,n,i){e=e|0;t=t|0;n=n|0;i=i|0;if(!((e|0)==0&(t|0)==0))do{n=n+-1|0;r[n>>0]=u[5694+(e&15)>>0]|0|i;e=rx(e|0,t|0,4)|0;t=A}while(!((e|0)==0&(t|0)==0));return n|0}function pT(e,t,n){e=e|0;t=t|0;n=n|0;if(!((e|0)==0&(t|0)==0))do{n=n+-1|0;r[n>>0]=e&7|48;e=rx(e|0,t|0,3)|0;t=A}while(!((e|0)==0&(t|0)==0));return n|0}function hT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0;if(t>>>0>0|(t|0)==0&e>>>0>4294967295){while(1){i=cx(e|0,t|0,10,0)|0;n=n+-1|0;r[n>>0]=i&255|48;i=e;e=ax(e|0,t|0,10,0)|0;if(!(t>>>0>9|(t|0)==9&i>>>0>4294967295))break;else t=A}t=e}else t=e;if(t)while(1){n=n+-1|0;r[n>>0]=(t>>>0)%10|0|48;if(t>>>0<10)break;else t=(t>>>0)/10|0}return n|0}function vT(e){e=e|0;return kT(e,o[(CT()|0)+188>>2]|0)|0}function mT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0;a=t&255;i=(n|0)!=0;e:do{if(i&(e&3|0)!=0){u=t&255;while(1){if((r[e>>0]|0)==u<<24>>24){l=6;break e}e=e+1|0;n=n+-1|0;i=(n|0)!=0;if(!(i&(e&3|0)!=0)){l=5;break}}}else l=5}while(0);if((l|0)==5)if(i)l=6;else n=0;e:do{if((l|0)==6){u=t&255;if((r[e>>0]|0)!=u<<24>>24){i=V(a,16843009)|0;t:do{if(n>>>0>3)while(1){a=o[e>>2]^i;if((a&-2139062144^-2139062144)&a+-16843009|0)break;e=e+4|0;n=n+-4|0;if(n>>>0<=3){l=11;break t}}else l=11}while(0);if((l|0)==11)if(!n){n=0;break}while(1){if((r[e>>0]|0)==u<<24>>24)break e;e=e+1|0;n=n+-1|0;if(!n){n=0;break}}}}}while(0);return(n|0?e:0)|0}function gT(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var o=0,u=0;u=h;h=h+256|0;o=u;if((n|0)>(r|0)&(i&73728|0)==0){i=n-r|0;tx(o|0,t|0,(i>>>0<256?i:256)|0)|0;if(i>>>0>255){t=n-r|0;do{sT(e,o,256);i=i+-256|0}while(i>>>0>255);i=t&255}sT(e,o,i)}h=u;return}function yT(e,t){e=e|0;t=t|0;if(!e)e=0;else e=DT(e,t,0)|0;return e|0}function _T(e,t,n,i,a,l){e=e|0;t=+t;n=n|0;i=i|0;a=a|0;l=l|0;var s=0,c=0,f=0,d=0,p=0,v=0,m=0,g=0.0,y=0,_=0,b=0,w=0,E=0,D=0,S=0,C=0,k=0,T=0,x=0,O=0,P=0,I=0,N=0;N=h;h=h+560|0;f=N+8|0;b=N;I=N+524|0;P=I;d=N+512|0;o[b>>2]=0;O=d+12|0;bT(t)|0;if((A|0)<0){t=-t;T=1;k=5659}else{T=(a&2049|0)!=0&1;k=(a&2048|0)==0?(a&1|0)==0?5660:5665:5662}bT(t)|0;x=A&2146435072;do{if(x>>>0<2146435072|(x|0)==2146435072&0<0){g=+wT(t,b)*2.0;s=g!=0.0;if(s)o[b>>2]=(o[b>>2]|0)+-1;E=l|32;if((E|0)==97){y=l&32;m=(y|0)==0?k:k+9|0;v=T|2;s=12-i|0;do{if(!(i>>>0>11|(s|0)==0)){t=8.0;do{s=s+-1|0;t=t*16.0}while((s|0)!=0);if((r[m>>0]|0)==45){t=-(t+(-g-t));break}else{t=g+t-t;break}}else t=g}while(0);c=o[b>>2]|0;s=(c|0)<0?0-c|0:c;s=hT(s,((s|0)<0)<<31>>31,O)|0;if((s|0)==(O|0)){s=d+11|0;r[s>>0]=48}r[s+-1>>0]=(c>>31&2)+43;p=s+-2|0;r[p>>0]=l+15;d=(i|0)<1;f=(a&8|0)==0;s=I;do{x=~~t;c=s+1|0;r[s>>0]=u[5694+x>>0]|y;t=(t-+(x|0))*16.0;if((c-P|0)==1?!(f&(d&t==0.0)):0){r[c>>0]=46;s=s+2|0}else s=c}while(t!=0.0);x=s-P|0;P=O-p|0;O=(i|0)!=0&(x+-2|0)<(i|0)?i+2|0:x;s=P+v+O|0;gT(e,32,n,s,a);sT(e,m,v);gT(e,48,n,s,a^65536);sT(e,I,x);gT(e,48,O-x|0,0,0);sT(e,p,P);gT(e,32,n,s,a^8192);break}c=(i|0)<0?6:i;if(s){s=(o[b>>2]|0)+-28|0;o[b>>2]=s;t=g*268435456.0}else{t=g;s=o[b>>2]|0}x=(s|0)<0?f:f+288|0;f=x;do{S=~~t>>>0;o[f>>2]=S;f=f+4|0;t=(t-+(S>>>0))*1.0e9}while(t!=0.0);if((s|0)>0){d=x;v=f;while(1){p=(s|0)<29?s:29;s=v+-4|0;if(s>>>0>=d>>>0){f=0;do{D=nx(o[s>>2]|0,0,p|0)|0;D=ex(D|0,A|0,f|0,0)|0;S=A;w=cx(D|0,S|0,1e9,0)|0;o[s>>2]=w;f=ax(D|0,S|0,1e9,0)|0;s=s+-4|0}while(s>>>0>=d>>>0);if(f){d=d+-4|0;o[d>>2]=f}}f=v;while(1){if(f>>>0<=d>>>0)break;s=f+-4|0;if(!(o[s>>2]|0))f=s;else break}s=(o[b>>2]|0)-p|0;o[b>>2]=s;if((s|0)>0)v=f;else break}}else d=x;if((s|0)<0){i=((c+25|0)/9|0)+1|0;_=(E|0)==102;do{y=0-s|0;y=(y|0)<9?y:9;if(d>>>0>>0){p=(1<>>y;m=0;s=d;do{S=o[s>>2]|0;o[s>>2]=(S>>>y)+m;m=V(S&p,v)|0;s=s+4|0}while(s>>>0>>0);s=(o[d>>2]|0)==0?d+4|0:d;if(!m){d=s;s=f}else{o[f>>2]=m;d=s;s=f+4|0}}else{d=(o[d>>2]|0)==0?d+4|0:d;s=f}f=_?x:d;f=(s-f>>2|0)>(i|0)?f+(i<<2)|0:s;s=(o[b>>2]|0)+y|0;o[b>>2]=s}while((s|0)<0);s=d;i=f}else{s=d;i=f}S=x;if(s>>>0>>0){f=(S-s>>2)*9|0;p=o[s>>2]|0;if(p>>>0>=10){d=10;do{d=d*10|0;f=f+1|0}while(p>>>0>=d>>>0)}}else f=0;_=(E|0)==103;w=(c|0)!=0;d=c-((E|0)!=102?f:0)+((w&_)<<31>>31)|0;if((d|0)<(((i-S>>2)*9|0)+-9|0)){d=d+9216|0;y=x+4+(((d|0)/9|0)+-1024<<2)|0;d=((d|0)%9|0)+1|0;if((d|0)<9){p=10;do{p=p*10|0;d=d+1|0}while((d|0)!=9)}else p=10;v=o[y>>2]|0;m=(v>>>0)%(p>>>0)|0;d=(y+4|0)==(i|0);if(!(d&(m|0)==0)){g=(((v>>>0)/(p>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;D=(p|0)/2|0;t=m>>>0>>0?.5:d&(m|0)==(D|0)?1.0:1.5;if(T){D=(r[k>>0]|0)==45;t=D?-t:t;g=D?-g:g}d=v-m|0;o[y>>2]=d;if(g+t!=g){D=d+p|0;o[y>>2]=D;if(D>>>0>999999999){f=y;while(1){d=f+-4|0;o[f>>2]=0;if(d>>>0>>0){s=s+-4|0;o[s>>2]=0}D=(o[d>>2]|0)+1|0;o[d>>2]=D;if(D>>>0>999999999)f=d;else break}}else d=y;f=(S-s>>2)*9|0;v=o[s>>2]|0;if(v>>>0>=10){p=10;do{p=p*10|0;f=f+1|0}while(v>>>0>=p>>>0)}}else d=y}else d=y;d=d+4|0;d=i>>>0>d>>>0?d:i;D=s}else{d=i;D=s}E=d;while(1){if(E>>>0<=D>>>0){b=0;break}s=E+-4|0;if(!(o[s>>2]|0))E=s;else{b=1;break}}i=0-f|0;do{if(_){s=((w^1)&1)+c|0;if((s|0)>(f|0)&(f|0)>-5){p=l+-1|0;c=s+-1-f|0}else{p=l+-2|0;c=s+-1|0}s=a&8;if(!s){if(b?(C=o[E+-4>>2]|0,(C|0)!=0):0){if(!((C>>>0)%10|0)){d=0;s=10;do{s=s*10|0;d=d+1|0}while(!((C>>>0)%(s>>>0)|0|0))}else d=0}else d=9;s=((E-S>>2)*9|0)+-9|0;if((p|32|0)==102){y=s-d|0;y=(y|0)>0?y:0;c=(c|0)<(y|0)?c:y;y=0;break}else{y=s+f-d|0;y=(y|0)>0?y:0;c=(c|0)<(y|0)?c:y;y=0;break}}else y=s}else{p=l;y=a&8}}while(0);_=c|y;v=(_|0)!=0&1;m=(p|32|0)==102;if(m){w=0;s=(f|0)>0?f:0}else{s=(f|0)<0?i:f;s=hT(s,((s|0)<0)<<31>>31,O)|0;d=O;if((d-s|0)<2)do{s=s+-1|0;r[s>>0]=48}while((d-s|0)<2);r[s+-1>>0]=(f>>31&2)+43;s=s+-2|0;r[s>>0]=p;w=s;s=d-s|0}s=T+1+c+v+s|0;gT(e,32,n,s,a);sT(e,k,T);gT(e,48,n,s,a^65536);if(m){p=D>>>0>x>>>0?x:D;y=I+9|0;v=y;m=I+8|0;d=p;do{f=hT(o[d>>2]|0,0,y)|0;if((d|0)==(p|0)){if((f|0)==(y|0)){r[m>>0]=48;f=m}}else if(f>>>0>I>>>0){tx(I|0,48,f-P|0)|0;do{f=f+-1|0}while(f>>>0>I>>>0)}sT(e,f,v-f|0);d=d+4|0}while(d>>>0<=x>>>0);if(_|0)sT(e,5710,1);if(d>>>0>>0&(c|0)>0)while(1){f=hT(o[d>>2]|0,0,y)|0;if(f>>>0>I>>>0){tx(I|0,48,f-P|0)|0;do{f=f+-1|0}while(f>>>0>I>>>0)}sT(e,f,(c|0)<9?c:9);d=d+4|0;f=c+-9|0;if(!(d>>>0>>0&(c|0)>9)){c=f;break}else c=f}gT(e,48,c+9|0,9,0)}else{_=b?E:D+4|0;if((c|0)>-1){b=I+9|0;y=(y|0)==0;i=b;v=0-P|0;m=I+8|0;p=D;do{f=hT(o[p>>2]|0,0,b)|0;if((f|0)==(b|0)){r[m>>0]=48;f=m}do{if((p|0)==(D|0)){d=f+1|0;sT(e,f,1);if(y&(c|0)<1){f=d;break}sT(e,5710,1);f=d}else{if(f>>>0<=I>>>0)break;tx(I|0,48,f+v|0)|0;do{f=f+-1|0}while(f>>>0>I>>>0)}}while(0);P=i-f|0;sT(e,f,(c|0)>(P|0)?P:c);c=c-P|0;p=p+4|0}while(p>>>0<_>>>0&(c|0)>-1)}gT(e,48,c+18|0,18,0);sT(e,w,O-w|0)}gT(e,32,n,s,a^8192)}else{I=(l&32|0)!=0;s=T+3|0;gT(e,32,n,s,a&-65537);sT(e,k,T);sT(e,t!=t|0.0!=0.0?I?5686:5690:I?5678:5682,3);gT(e,32,n,s,a^8192)}}while(0);h=N;return((s|0)<(n|0)?n:s)|0}function bT(e){e=+e;var t=0;c[d>>3]=e;t=o[d>>2]|0;A=o[d+4>>2]|0;return t|0}function wT(e,t){e=+e;t=t|0;return+ +ET(e,t)}function ET(e,t){e=+e;t=t|0;var n=0,r=0,i=0;c[d>>3]=e;n=o[d>>2]|0;r=o[d+4>>2]|0;i=rx(n|0,r|0,52)|0;switch(i&2047){case 0:{if(e!=0.0){e=+ET(e*18446744073709551616.0,t);n=(o[t>>2]|0)+-64|0}else n=0;o[t>>2]=n;break}case 2047:break;default:{o[t>>2]=(i&2047)+-1022;o[d>>2]=n;o[d+4>>2]=r&-2146435073|1071644672;e=+c[d>>3]}}return+e}function DT(e,t,n){e=e|0;t=t|0;n=n|0;do{if(e){if(t>>>0<128){r[e>>0]=t;e=1;break}if(!(o[o[(ST()|0)+188>>2]>>2]|0))if((t&-128|0)==57216){r[e>>0]=t;e=1;break}else{o[(Jk()|0)>>2]=84;e=-1;break}if(t>>>0<2048){r[e>>0]=t>>>6|192;r[e+1>>0]=t&63|128;e=2;break}if(t>>>0<55296|(t&-8192|0)==57344){r[e>>0]=t>>>12|224;r[e+1>>0]=t>>>6&63|128;r[e+2>>0]=t&63|128;e=3;break}if((t+-65536|0)>>>0<1048576){r[e>>0]=t>>>18|240;r[e+1>>0]=t>>>12&63|128;r[e+2>>0]=t>>>6&63|128;r[e+3>>0]=t&63|128;e=4;break}else{o[(Jk()|0)>>2]=84;e=-1;break}}else e=1}while(0);return e|0}function ST(){return eT()|0}function CT(){return eT()|0}function kT(e,t){e=e|0;t=t|0;var n=0,i=0;i=0;while(1){if((u[5712+i>>0]|0)==(e|0)){e=2;break}n=i+1|0;if((n|0)==87){n=5800;i=87;e=5;break}else i=n}if((e|0)==2)if(!i)n=5800;else{n=5800;e=5}if((e|0)==5)while(1){do{e=n;n=n+1|0}while((r[e>>0]|0)!=0);i=i+-1|0;if(!i)break;else e=5}return TT(n,o[t+20>>2]|0)|0}function TT(e,t){e=e|0;t=t|0;return xT(e,t)|0}function xT(e,t){e=e|0;t=t|0;if(!t)t=0;else t=AT(o[t>>2]|0,o[t+4>>2]|0,e)|0;return(t|0?t:e)|0}function AT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,h=0;h=(o[e>>2]|0)+1794895138|0;a=OT(o[e+8>>2]|0,h)|0;i=OT(o[e+12>>2]|0,h)|0;u=OT(o[e+16>>2]|0,h)|0;e:do{if((a>>>0>>2>>>0?(p=t-(a<<2)|0,i>>>0

    >>0&u>>>0

    >>0):0)?((u|i)&3|0)==0:0){p=i>>>2;d=u>>>2;f=0;while(1){s=a>>>1;c=f+s|0;l=c<<1;u=l+p|0;i=OT(o[e+(u<<2)>>2]|0,h)|0;u=OT(o[e+(u+1<<2)>>2]|0,h)|0;if(!(u>>>0>>0&i>>>0<(t-u|0)>>>0)){i=0;break e}if(r[e+(u+i)>>0]|0){i=0;break e}i=rT(n,e+u|0)|0;if(!i)break;i=(i|0)<0;if((a|0)==1){i=0;break e}else{f=i?f:c;a=i?s:a-s|0}}i=l+d|0;u=OT(o[e+(i<<2)>>2]|0,h)|0;i=OT(o[e+(i+1<<2)>>2]|0,h)|0;if(i>>>0>>0&u>>>0<(t-i|0)>>>0)i=(r[e+(i+u)>>0]|0)==0?e+i|0:0;else i=0}else i=0}while(0);return i|0}function OT(e,t){e=e|0;t=t|0;var n=0;n=fx(e|0)|0;return((t|0)==0?e:n)|0}function PT(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0,s=0;i=n+16|0;u=o[i>>2]|0;if(!u){if(!(IT(n)|0)){u=o[i>>2]|0;a=5}else i=0}else a=5;e:do{if((a|0)==5){s=n+20|0;l=o[s>>2]|0;i=l;if((u-l|0)>>>0>>0){i=_A[o[n+36>>2]&7](n,e,t)|0;break}t:do{if((r[n+75>>0]|0)>-1){l=t;while(1){if(!l){a=0;u=e;break t}u=l+-1|0;if((r[e+u>>0]|0)==10)break;else l=u}i=_A[o[n+36>>2]&7](n,e,l)|0;if(i>>>0>>0)break e;a=l;u=e+l|0;t=t-l|0;i=o[s>>2]|0}else{a=0;u=e}}while(0);ix(i|0,u|0,t|0)|0;o[s>>2]=(o[s>>2]|0)+t;i=a+t|0}}while(0);return i|0}function IT(e){e=e|0;var t=0,n=0;t=e+74|0;n=r[t>>0]|0;r[t>>0]=n+255|n;t=o[e>>2]|0;if(!(t&8)){o[e+8>>2]=0;o[e+4>>2]=0;n=o[e+44>>2]|0;o[e+28>>2]=n;o[e+20>>2]=n;o[e+16>>2]=n+(o[e+48>>2]|0);e=0}else{o[e>>2]=t|32;e=-1}return e|0}function NT(e,t){e=Y(e);t=Y(t);var n=0,r=0;n=MT(e)|0;do{if((n&2147483647)>>>0<=2139095040){r=MT(t)|0;if((r&2147483647)>>>0<=2139095040)if((r^n|0)<0){e=(n|0)<0?t:e;break}else{e=e>2]=e,o[d>>2]|0)|0}function RT(e,t){e=Y(e);t=Y(t);var n=0,r=0;n=FT(e)|0;do{if((n&2147483647)>>>0<=2139095040){r=FT(t)|0;if((r&2147483647)>>>0<=2139095040)if((r^n|0)<0){e=(n|0)<0?e:t;break}else{e=e>2]=e,o[d>>2]|0)|0}function LT(e,t){e=Y(e);t=Y(t);var n=0,r=0,i=0,u=0,a=0,l=0,c=0,f=0;u=(s[d>>2]=e,o[d>>2]|0);l=(s[d>>2]=t,o[d>>2]|0);n=u>>>23&255;a=l>>>23&255;c=u&-2147483648;i=l<<1;e:do{if((i|0)!=0?!((n|0)==255|((BT(t)|0)&2147483647)>>>0>2139095040):0){r=u<<1;if(r>>>0<=i>>>0){t=Y(e*Y(0.0));return Y((r|0)==(i|0)?t:e)}if(!n){n=u<<9;if((n|0)>-1){r=n;n=0;do{n=n+-1|0;r=r<<1}while((r|0)>-1)}else n=0;r=u<<1-n}else r=u&8388607|8388608;if(!a){u=l<<9;if((u|0)>-1){i=0;do{i=i+-1|0;u=u<<1}while((u|0)>-1)}else i=0;a=i;l=l<<1-i}else l=l&8388607|8388608;i=r-l|0;u=(i|0)>-1;t:do{if((n|0)>(a|0)){while(1){if(u)if(!i)break;else r=i;r=r<<1;n=n+-1|0;i=r-l|0;u=(i|0)>-1;if((n|0)<=(a|0))break t}t=Y(e*Y(0.0));break e}}while(0);if(u)if(!i){t=Y(e*Y(0.0));break}else r=i;if(r>>>0<8388608)do{r=r<<1;n=n+-1|0}while(r>>>0<8388608);if((n|0)>0)n=r+-8388608|n<<23;else n=r>>>(1-n|0);t=(o[d>>2]=n|c,Y(s[d>>2]))}else f=3}while(0);if((f|0)==3){t=Y(e*t);t=Y(t/t)}return Y(t)}function BT(e){e=Y(e);return(s[d>>2]=e,o[d>>2]|0)|0}function jT(e,t){e=e|0;t=t|0;return oT(o[582]|0,e,t)|0}function UT(e){e=e|0;Ye()}function zT(e){e=e|0;return}function WT(e,t){e=e|0;t=t|0;return 0}function HT(e){e=e|0;if((VT(e+4|0)|0)==-1){hA[o[(o[e>>2]|0)+8>>2]&127](e);e=1}else e=0;return e|0}function VT(e){e=e|0;var t=0;t=o[e>>2]|0;o[e>>2]=t+-1;return t+-1|0}function qT(e){e=e|0;if(HT(e)|0)GT(e);return}function GT(e){e=e|0;var t=0;t=e+8|0;if(!((o[t>>2]|0)!=0?(VT(t)|0)!=-1:0))hA[o[(o[e>>2]|0)+16>>2]&127](e);return}function $T(e){e=e|0;var t=0;t=(e|0)==0?1:e;while(1){e=qk(t)|0;if(e|0)break;e=QT()|0;if(!e){e=0;break}IA[e&0]()}return e|0}function YT(e){e=e|0;return $T(e)|0}function KT(e){e=e|0;Gk(e);return}function XT(e){e=e|0;if((r[e+11>>0]|0)<0)KT(o[e>>2]|0);return}function QT(){var e=0;e=o[2923]|0;o[2923]=e+0;return e|0}function JT(){}function ZT(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;r=t-r-(n>>>0>e>>>0|0)>>>0;return(A=r,e-n>>>0|0)|0}function ex(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;n=e+n>>>0;return(A=t+r+(n>>>0>>0|0)>>>0,n|0)|0}function tx(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0,l=0;a=e+n|0;t=t&255;if((n|0)>=67){while(e&3){r[e>>0]=t;e=e+1|0}i=a&-4|0;u=i-64|0;l=t|t<<8|t<<16|t<<24;while((e|0)<=(u|0)){o[e>>2]=l;o[e+4>>2]=l;o[e+8>>2]=l;o[e+12>>2]=l;o[e+16>>2]=l;o[e+20>>2]=l;o[e+24>>2]=l;o[e+28>>2]=l;o[e+32>>2]=l;o[e+36>>2]=l;o[e+40>>2]=l;o[e+44>>2]=l;o[e+48>>2]=l;o[e+52>>2]=l;o[e+56>>2]=l;o[e+60>>2]=l;e=e+64|0}while((e|0)<(i|0)){o[e>>2]=l;e=e+4|0}}while((e|0)<(a|0)){r[e>>0]=t;e=e+1|0}return a-n|0}function nx(e,t,n){e=e|0;t=t|0;n=n|0;if((n|0)<32){A=t<>>32-n;return e<>>n;return e>>>n|(t&(1<>>n-32|0}function ix(e,t,n){e=e|0;t=t|0;n=n|0;var i=0,u=0,a=0;if((n|0)>=8192)return He(e|0,t|0,n|0)|0;a=e|0;u=e+n|0;if((e&3)==(t&3)){while(e&3){if(!n)return a|0;r[e>>0]=r[t>>0]|0;e=e+1|0;t=t+1|0;n=n-1|0}n=u&-4|0;i=n-64|0;while((e|0)<=(i|0)){o[e>>2]=o[t>>2];o[e+4>>2]=o[t+4>>2];o[e+8>>2]=o[t+8>>2];o[e+12>>2]=o[t+12>>2];o[e+16>>2]=o[t+16>>2];o[e+20>>2]=o[t+20>>2];o[e+24>>2]=o[t+24>>2];o[e+28>>2]=o[t+28>>2];o[e+32>>2]=o[t+32>>2];o[e+36>>2]=o[t+36>>2];o[e+40>>2]=o[t+40>>2];o[e+44>>2]=o[t+44>>2];o[e+48>>2]=o[t+48>>2];o[e+52>>2]=o[t+52>>2];o[e+56>>2]=o[t+56>>2];o[e+60>>2]=o[t+60>>2];e=e+64|0;t=t+64|0}while((e|0)<(n|0)){o[e>>2]=o[t>>2];e=e+4|0;t=t+4|0}}else{n=u-4|0;while((e|0)<(n|0)){r[e>>0]=r[t>>0]|0;r[e+1>>0]=r[t+1>>0]|0;r[e+2>>0]=r[t+2>>0]|0;r[e+3>>0]=r[t+3>>0]|0;e=e+4|0;t=t+4|0}}while((e|0)<(u|0)){r[e>>0]=r[t>>0]|0;e=e+1|0;t=t+1|0}return a|0}function ox(e){e=e|0;var t=0;t=r[m+(e&255)>>0]|0;if((t|0)<8)return t|0;t=r[m+(e>>8&255)>>0]|0;if((t|0)<8)return t+8|0;t=r[m+(e>>16&255)>>0]|0;if((t|0)<8)return t+16|0;return(r[m+(e>>>24)>>0]|0)+24|0}function ux(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;var u=0,a=0,l=0,s=0,c=0,f=0,d=0,p=0,h=0,v=0;f=e;s=t;c=s;a=n;p=r;l=p;if(!c){u=(i|0)!=0;if(!l){if(u){o[i>>2]=(f>>>0)%(a>>>0);o[i+4>>2]=0}p=0;i=(f>>>0)/(a>>>0)>>>0;return(A=p,i)|0}else{if(!u){p=0;i=0;return(A=p,i)|0}o[i>>2]=e|0;o[i+4>>2]=t&0;p=0;i=0;return(A=p,i)|0}}u=(l|0)==0;do{if(a){if(!u){u=($(l|0)|0)-($(c|0)|0)|0;if(u>>>0<=31){d=u+1|0;l=31-u|0;t=u-31>>31;a=d;e=f>>>(d>>>0)&t|c<>>(d>>>0)&t;u=0;l=f<>2]=e|0;o[i+4>>2]=s|t&0;p=0;i=0;return(A=p,i)|0}u=a-1|0;if(u&a|0){l=($(a|0)|0)+33-($(c|0)|0)|0;v=64-l|0;d=32-l|0;s=d>>31;h=l-32|0;t=h>>31;a=l;e=d-1>>31&c>>>(h>>>0)|(c<>>(l>>>0))&t;t=t&c>>>(l>>>0);u=f<>>(h>>>0))&s|f<>31;break}if(i|0){o[i>>2]=u&f;o[i+4>>2]=0}if((a|0)==1){h=s|t&0;v=e|0|0;return(A=h,v)|0}else{v=ox(a|0)|0;h=c>>>(v>>>0)|0;v=c<<32-v|f>>>(v>>>0)|0;return(A=h,v)|0}}else{if(u){if(i|0){o[i>>2]=(c>>>0)%(a>>>0);o[i+4>>2]=0}h=0;v=(c>>>0)/(a>>>0)>>>0;return(A=h,v)|0}if(!f){if(i|0){o[i>>2]=0;o[i+4>>2]=(c>>>0)%(l>>>0)}h=0;v=(c>>>0)/(l>>>0)>>>0;return(A=h,v)|0}u=l-1|0;if(!(u&l)){if(i|0){o[i>>2]=e|0;o[i+4>>2]=u&c|t&0}h=0;v=c>>>((ox(l|0)|0)>>>0);return(A=h,v)|0}u=($(l|0)|0)-($(c|0)|0)|0;if(u>>>0<=30){t=u+1|0;l=31-u|0;a=t;e=c<>>(t>>>0);t=c>>>(t>>>0);u=0;l=f<>2]=e|0;o[i+4>>2]=s|t&0;h=0;v=0;return(A=h,v)|0}}while(0);if(!a){c=l;s=0;l=0}else{d=n|0|0;f=p|r&0;c=ex(d|0,f|0,-1,-1)|0;n=A;s=l;l=0;do{r=s;s=u>>>31|s<<1;u=l|u<<1;r=e<<1|r>>>31|0;p=e>>>31|t<<1|0;ZT(c|0,n|0,r|0,p|0)|0;v=A;h=v>>31|((v|0)<0?-1:0)<<1;l=h&1;e=ZT(r|0,p|0,h&d|0,(((v|0)<0?-1:0)>>31|((v|0)<0?-1:0)<<1)&f|0)|0;t=A;a=a-1|0}while((a|0)!=0);c=s;s=0}a=0;if(i|0){o[i>>2]=e;o[i+4>>2]=t}h=(u|0)>>>31|(c|a)<<1|(a<<1|u>>>31)&0|s;v=(u<<1|0>>>31)&-2|l;return(A=h,v)|0}function ax(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;return ux(e,t,n,r,0)|0}function lx(e){e=e|0;var t=0,n=0;n=e+15&-16|0;t=o[f>>2]|0;e=t+n|0;if((n|0)>0&(e|0)<(t|0)|(e|0)<0){Z()|0;qe(12);return-1}o[f>>2]=e;if((e|0)>(J()|0)?(Q()|0)==0:0){o[f>>2]=t;qe(12);return-1}return t|0}function sx(e,t,n){e=e|0;t=t|0;n=n|0;var i=0;if((t|0)<(e|0)&(e|0)<(t+n|0)){i=e;t=t+n|0;e=e+n|0;while((n|0)>0){e=e-1|0;t=t-1|0;n=n-1|0;r[e>>0]=r[t>>0]|0}e=i}else ix(e,t,n)|0;return e|0}function cx(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;var i=0,u=0;u=h;h=h+16|0;i=u|0;ux(e,t,n,r,i)|0;h=u;return(A=o[i+4>>2]|0,o[i>>2]|0)|0}function fx(e){e=e|0;return(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function dx(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;cA[e&1](t|0,n|0,r|0,i|0,o|0)}function px(e,t,n){e=e|0;t=t|0;n=Y(n);fA[e&1](t|0,Y(n))}function hx(e,t,n){e=e|0;t=t|0;n=+n;dA[e&31](t|0,+n)}function vx(e,t,n,r){e=e|0;t=t|0;n=Y(n);r=Y(r);return Y(pA[e&0](t|0,Y(n),Y(r)))}function mx(e,t){e=e|0;t=t|0;hA[e&127](t|0)}function gx(e,t,n){e=e|0;t=t|0;n=n|0;vA[e&31](t|0,n|0)}function yx(e,t){e=e|0;t=t|0;return mA[e&31](t|0)|0}function _x(e,t,n,r,i){e=e|0;t=t|0;n=+n;r=+r;i=i|0;gA[e&1](t|0,+n,+r,i|0)}function bx(e,t,n,r){e=e|0;t=t|0;n=+n;r=+r;yA[e&1](t|0,+n,+r)}function wx(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;return _A[e&7](t|0,n|0,r|0)|0}function Ex(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;return+bA[e&1](t|0,n|0,r|0)}function Dx(e,t){e=e|0;t=t|0;return+wA[e&15](t|0)}function Sx(e,t,n){e=e|0;t=t|0;n=+n;return EA[e&1](t|0,+n)|0}function Cx(e,t,n){e=e|0;t=t|0;n=n|0;return DA[e&15](t|0,n|0)|0}function kx(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=+r;i=+i;o=o|0;SA[e&1](t|0,n|0,+r,+i,o|0)}function Tx(e,t,n,r,i,o,u){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;u=u|0;CA[e&1](t|0,n|0,r|0,i|0,o|0,u|0)}function xx(e,t,n){e=e|0;t=t|0;n=n|0;return+kA[e&7](t|0,n|0)}function Ax(e){e=e|0;return TA[e&7]()|0}function Ox(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;return xA[e&1](t|0,n|0,r|0,i|0,o|0)|0}function Px(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=+i;AA[e&1](t|0,n|0,r|0,+i)}function Ix(e,t,n,r,i,o,u){e=e|0;t=t|0;n=n|0;r=Y(r);i=i|0;o=Y(o);u=u|0;OA[e&1](t|0,n|0,Y(r),i|0,Y(o),u|0)}function Nx(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;PA[e&15](t|0,n|0,r|0)}function Mx(e){e=e|0;IA[e&0]()}function Rx(e,t,n,r){e=e|0;t=t|0;n=n|0;r=+r;NA[e&15](t|0,n|0,+r)}function Fx(e,t,n){e=e|0;t=+t;n=+n;return MA[e&1](+t,+n)|0}function Lx(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;RA[e&15](t|0,n|0,r|0,i|0)}function Bx(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;K(0)}function jx(e,t){e=e|0;t=Y(t);K(1)}function Ux(e,t){e=e|0;t=+t;K(2)}function zx(e,t,n){e=e|0;t=Y(t);n=Y(n);K(3);return ft}function Wx(e){e=e|0;K(4)}function Hx(e,t){e=e|0;t=t|0;K(5)}function Vx(e){e=e|0;K(6);return 0}function qx(e,t,n,r){e=e|0;t=+t;n=+n;r=r|0;K(7)}function Gx(e,t,n){e=e|0;t=+t;n=+n;K(8)}function $x(e,t,n){e=e|0;t=t|0;n=n|0;K(9);return 0}function Yx(e,t,n){e=e|0;t=t|0;n=n|0;K(10);return 0.0}function Kx(e){e=e|0;K(11);return 0.0}function Xx(e,t){e=e|0;t=+t;K(12);return 0}function Qx(e,t){e=e|0;t=t|0;K(13);return 0}function Jx(e,t,n,r,i){e=e|0;t=t|0;n=+n;r=+r;i=i|0;K(14)}function Zx(e,t,n,r,i,o){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;o=o|0;K(15)}function eA(e,t){e=e|0;t=t|0;K(16);return 0.0}function tA(){K(17);return 0}function nA(e,t,n,r,i){e=e|0;t=t|0;n=n|0;r=r|0;i=i|0;K(18);return 0}function rA(e,t,n,r){e=e|0;t=t|0;n=n|0;r=+r;K(19)}function iA(e,t,n,r,i,o){e=e|0;t=t|0;n=Y(n);r=r|0;i=Y(i);o=o|0;K(20)}function oA(e,t,n){e=e|0;t=t|0;n=n|0;K(21)}function uA(){K(22)}function aA(e,t,n){e=e|0;t=t|0;n=+n;K(23)}function lA(e,t){e=+e;t=+t;K(24);return 0}function sA(e,t,n,r){e=e|0;t=t|0;n=n|0;r=r|0;K(25)}var cA=[Bx,DE];var fA=[jx,qi];var dA=[Ux,yo,_o,bo,wo,Eo,Do,So,ko,To,Ao,Oo,Po,Io,No,Mo,Ro,Fo,Lo,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux,Ux];var pA=[zx];var hA=[Wx,zT,hl,vl,ml,Kd,Xd,Qd,yb,_b,bb,oE,uE,aE,uk,ak,lk,bt,Xi,to,Co,xo,ju,Uu,Ka,Sl,Wl,ps,Ns,rc,kc,qc,df,Mf,Zf,yd,Ld,gp,Fp,th,bh,jh,iv,kv,Vv,am,xm,Wi,cg,Ag,Qg,yy,Fy,o_,g_,b_,U_,H_,ab,Db,kb,Gb,pw,Cl,OD,pS,PS,KS,bC,BC,XC,ZC,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx,Wx];var vA=[Hx,no,ro,uo,ao,lo,so,co,fo,vo,mo,go,eu,ru,iu,ou,uu,au,lu,pu,gu,Ku,Ov,$v,Ey,ND,ww,eS,Hx,Hx,Hx,Hx];var mA=[Vx,Yk,Ki,zo,qo,Go,$o,Yo,Ko,Xo,Jo,Zo,hu,vu,zu,Pm,Uy,Kb,BD,UD,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx,Vx];var gA=[qx,Wu];var yA=[Gx,cb];var _A=[$x,Kk,Xk,nT,ac,wp,hg,ZS];var bA=[Yx,rd];var wA=[Kx,tu,nu,su,Hu,Vu,qu,Gu,$u,Yu,Kx,Kx,Kx,Kx,Kx,Kx];var EA=[Xx,p_];var DA=[Qx,WT,mu,tl,gs,Oc,Kc,zd,Up,fm,Gi,RS,Qx,Qx,Qx,Qx];var SA=[Jx,Gl];var CA=[Zx,SC];var kA=[eA,cu,Xu,Qu,Ju,Ed,eA,eA];var TA=[tA,Zu,$i,Ui,C_,$_,Pb,rk];var xA=[nA,Fr];var AA=[rA,Sh];var OA=[iA,_u];var PA=[oA,Wo,Qo,fu,du,Ls,mf,Hh,lv,Vi,JE,gS,WC,oA,oA,oA];var IA=[uA];var NA=[aA,io,oo,po,ho,Bo,jo,Uo,oh,Ng,l_,aA,aA,aA,aA,aA];var MA=[lA,vb];var RA=[sA,Bf,jm,ty,Ky,P_,Z_,Bb,yw,qD,hk,sA,sA,sA,sA,sA];return{_llvm_bswap_i32:fx,dynCall_idd:Fx,dynCall_i:Ax,_i64Subtract:ZT,___udivdi3:ax,dynCall_vif:px,setThrew:mt,dynCall_viii:Nx,_bitshift64Lshr:rx,_bitshift64Shl:nx,dynCall_vi:mx,dynCall_viiddi:kx,dynCall_diii:Ex,dynCall_iii:Cx,_memset:tx,_sbrk:lx,_memcpy:ix,__GLOBAL__sub_I_Yoga_cpp:ji,dynCall_vii:gx,___uremdi3:cx,dynCall_vid:hx,stackAlloc:dt,_nbind_init:Ak,getTempRet0:yt,dynCall_di:Dx,dynCall_iid:Sx,setTempRet0:gt,_i64Add:ex,dynCall_fiff:vx,dynCall_iiii:wx,_emscripten_get_global_libc:$k,dynCall_viid:Rx,dynCall_viiid:Px,dynCall_viififi:Ix,dynCall_ii:yx,__GLOBAL__sub_I_Binding_cc:wD,dynCall_viiii:Lx,dynCall_iiiiii:Ox,stackSave:pt,dynCall_viiiii:dx,__GLOBAL__sub_I_nbind_cc:ea,dynCall_vidd:bx,_free:Gk,runPostSets:JT,dynCall_viiiiii:Tx,establishStackSpace:vt,_memmove:sx,stackRestore:ht,_malloc:qk,__GLOBAL__sub_I_common_cc:iw,dynCall_viddi:_x,dynCall_dii:xx,dynCall_v:Mx}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii,initialStackTop;function ExitStatus(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm,ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var preloadStartTime=null,calledMain=!1;function run(e){function t(){Module.calledRun||(Module.calledRun=!0,ABORT||(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(e),postRun()))}e=e||Module.arguments,null===preloadStartTime&&(preloadStartTime=Date.now()),runDependencies>0||(preRun(),runDependencies>0||Module.calledRun||(Module.setStatus?(Module.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Module.setStatus("")}),1),t()}),1)):t()))}function exit(e,t){t&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=e,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(e)),ENVIRONMENT_IS_NODE&&process.exit(e),Module.quit(e,new ExitStatus(e)))}dependenciesFulfilled=function e(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=e)},Module.callMain=Module.callMain=function(e){e=e||[],ensureInitRuntime();var t=e.length+1;function n(){for(var e=0;e<3;e++)r.push(0)}var r=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];n();for(var i=0;i0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()},void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return wrapper}.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__=[]))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)},3019:e=>{"use strict";e.exports={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}},6401:(e,t,n)=>{"use strict";var r=n(7180),i=n(3354),o=!1,u=null;if(i({},(function(e,t){if(!o){if(o=!0,e)throw e;u=t}})),!o)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");e.exports=r(u.bind,u.lib)},7180:(e,t,n)=>{"use strict";var r=Object.assign||function(e){for(var t=1;t"}}]),e}(),s=function(){function e(t,n){u(this,e),this.width=t,this.height=n}return i(e,null,[{key:"fromJS",value:function(t){return new e(t.width,t.height)}}]),i(e,[{key:"fromJS",value:function(e){e(this.width,this.height)}},{key:"toString",value:function(){return""}}]),e}(),c=function(){function e(t,n){u(this,e),this.unit=t,this.value=n}return i(e,[{key:"fromJS",value:function(e){e(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case a.UNIT_POINT:return String(this.value);case a.UNIT_PERCENT:return this.value+"%";case a.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),e}();e.exports=function(e,t){function n(e,t,n){var r=e[t];e[t]=function(){for(var e=arguments.length,t=Array(e),i=0;i1?t-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:NaN,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:NaN,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:a.DIRECTION_LTR;return e.call(this,t,n,r)})),r({Config:t.Config,Node:t.Node,Layout:e("Layout",l),Size:e("Size",s),Value:e("Value",c),getInstanceCount:function(){return t.getInstanceCount.apply(t,arguments)}},a)}},2357:e=>{"use strict";e.exports=require("assert")},6417:e=>{"use strict";e.exports=require("crypto")},8614:e=>{"use strict";e.exports=require("events")},5747:e=>{"use strict";e.exports=require("fs")},8605:e=>{"use strict";e.exports=require("http")},7211:e=>{"use strict";e.exports=require("https")},2282:e=>{"use strict";e.exports=require("module")},1631:e=>{"use strict";e.exports=require("net")},2087:e=>{"use strict";e.exports=require("os")},2413:e=>{"use strict";e.exports=require("stream")},4016:e=>{"use strict";e.exports=require("tls")},3867:e=>{"use strict";e.exports=require("tty")},8835:e=>{"use strict";e.exports=require("url")},8761:e=>{"use strict";e.exports=require("zlib")}},__webpack_module_cache__={};function __webpack_require__(e){if(__webpack_module_cache__[e])return __webpack_module_cache__[e].exports;var t=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(t.exports,t,t.exports,__webpack_require__),t.loaded=!0,t.exports}return __webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),__webpack_require__(7560)})(); return plugin; } -}; \ No newline at end of file +}; diff --git a/tgui/.yarn/sdks/eslint/bin/eslint.js b/tgui/.yarn/sdks/eslint/bin/eslint.js index 4d327a49a0..e87dd269e2 100644 --- a/tgui/.yarn/sdks/eslint/bin/eslint.js +++ b/tgui/.yarn/sdks/eslint/bin/eslint.js @@ -1,10 +1,10 @@ #!/usr/bin/env node -const {existsSync} = require(`fs`); -const {createRequire, createRequireFromPath} = require(`module`); -const {resolve} = require(`path`); +const { existsSync } = require(`fs`); +const { createRequire, createRequireFromPath } = require(`module`); +const { resolve } = require(`path`); -const relPnpApiPath = "../../../../.pnp.cjs"; +const relPnpApiPath = '../../../../.pnp.cjs'; const absPnpApiPath = resolve(__dirname, relPnpApiPath); const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath); @@ -17,4 +17,4 @@ if (existsSync(absPnpApiPath)) { } // Defer to the real eslint/bin/eslint.js your application uses -module.exports = absRequire(`eslint/bin/eslint.js`); +module.exports = absRequire(`eslint`); diff --git a/tgui/.yarn/sdks/eslint/lib/api.js b/tgui/.yarn/sdks/eslint/lib/api.js index 97a052442a..fc728d952b 100644 --- a/tgui/.yarn/sdks/eslint/lib/api.js +++ b/tgui/.yarn/sdks/eslint/lib/api.js @@ -11,10 +11,10 @@ const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath); if (existsSync(absPnpApiPath)) { if (!process.versions.pnp) { - // Setup the environment to be able to require eslint/lib/api.js + // Setup the environment to be able to require eslint require(absPnpApiPath).setup(); } } -// Defer to the real eslint/lib/api.js your application uses -module.exports = absRequire(`eslint/lib/api.js`); +// Defer to the real eslint your application uses +module.exports = absRequire(`eslint`); diff --git a/tgui/.yarn/sdks/prettier/index.js b/tgui/.yarn/sdks/prettier/index.js new file mode 100644 index 0000000000..f6882d8097 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/index.js @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +const {existsSync} = require(`fs`); +const {createRequire, createRequireFromPath} = require(`module`); +const {resolve} = require(`path`); + +const relPnpApiPath = "../../../.pnp.cjs"; + +const absPnpApiPath = resolve(__dirname, relPnpApiPath); +const absRequire = (createRequire || createRequireFromPath)(absPnpApiPath); + +if (existsSync(absPnpApiPath)) { + if (!process.versions.pnp) { + // Setup the environment to be able to require prettier/index.js + require(absPnpApiPath).setup(); + } +} + +// Defer to the real prettier/index.js your application uses +module.exports = absRequire(`prettier/index.js`); diff --git a/tgui/.yarn/sdks/prettier/package.json b/tgui/.yarn/sdks/prettier/package.json new file mode 100644 index 0000000000..0cbd71ff32 --- /dev/null +++ b/tgui/.yarn/sdks/prettier/package.json @@ -0,0 +1,6 @@ +{ + "name": "prettier", + "version": "0.19.0-sdk", + "main": "./index.js", + "type": "commonjs" +} diff --git a/tgui/.yarn/sdks/typescript/lib/tsserver.js b/tgui/.yarn/sdks/typescript/lib/tsserver.js index 4d90f3879d..9f9f4d6f46 100644 --- a/tgui/.yarn/sdks/typescript/lib/tsserver.js +++ b/tgui/.yarn/sdks/typescript/lib/tsserver.js @@ -18,6 +18,7 @@ const moduleWrapper = tsserver => { const pnpApi = require(`pnpapi`); const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { @@ -30,7 +31,7 @@ const moduleWrapper = tsserver => { function toEditorPath(str) { // We add the `zip:` prefix to both `.zip/` paths and virtual paths - if (isAbsolute(str) && !str.match(/^\^zip:/) && (str.match(/\.zip\//) || isVirtual(str))) { + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { // We also take the opportunity to turn virtual paths into physical ones; // this makes it much easier to work with workspaces that list peer // dependencies, since otherwise Ctrl+Click would bring us to the virtual @@ -44,7 +45,7 @@ const moduleWrapper = tsserver => { const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; if (resolved) { const locator = pnpApi.findPackageLocator(resolved); - if (locator && dependencyTreeRoots.has(`${locator.name}@${locator.reference}`)) { + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { str = resolved; } } @@ -60,10 +61,34 @@ const moduleWrapper = tsserver => { // // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 // - case `vscode`: { + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: { str = `^zip:${str}`; } break; + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; + + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; + + case `vscode`: { + str = `^/zip/${str}`; + } break; + // To make "go to definition" work, // We have to resolve the actual file system path from virtual path // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) @@ -77,7 +102,7 @@ const moduleWrapper = tsserver => { // everything else is up to neovim case `neovim`: { str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = `zipfile:${str}`; + str = `zipfile://${str}`; } break; default: { @@ -91,9 +116,28 @@ const moduleWrapper = tsserver => { } function fromEditorPath(str) { - return process.platform === `win32` - ? str.replace(/^\^?zip:\//, ``) - : str.replace(/^\^?zip:/, ``); + switch (hostInfo) { + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; + + case `vscode`: + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; + } } // Force enable 'allowLocalPluginLoads' @@ -119,8 +163,9 @@ const moduleWrapper = tsserver => { let hostInfo = `unknown`; Object.assign(Session.prototype, { - onMessage(/** @type {string} */ message) { - const parsedMessage = JSON.parse(message) + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; if ( parsedMessage != null && @@ -129,11 +174,32 @@ const moduleWrapper = tsserver => { typeof parsedMessage.arguments.hostInfo === `string` ) { hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } } - return originalOnMessage.call(this, JSON.stringify(parsedMessage, (key, value) => { - return typeof value === `string` ? fromEditorPath(value) : value; - })); + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); + + return originalOnMessage.call( + this, + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) + ); }, send(/** @type {any} */ msg) { diff --git a/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js index c3de4ff5d7..878b11946a 100644 --- a/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js +++ b/tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js @@ -18,6 +18,7 @@ const moduleWrapper = tsserver => { const pnpApi = require(`pnpapi`); const isVirtual = str => str.match(/\/(\$\$virtual|__virtual__)\//); + const isPortal = str => str.startsWith("portal:/"); const normalize = str => str.replace(/\\/g, `/`).replace(/^\/?/, `/`); const dependencyTreeRoots = new Set(pnpApi.getDependencyTreeRoots().map(locator => { @@ -30,7 +31,7 @@ const moduleWrapper = tsserver => { function toEditorPath(str) { // We add the `zip:` prefix to both `.zip/` paths and virtual paths - if (isAbsolute(str) && !str.match(/^\^zip:/) && (str.match(/\.zip\//) || isVirtual(str))) { + if (isAbsolute(str) && !str.match(/^\^?(zip:|\/zip\/)/) && (str.match(/\.zip\//) || isVirtual(str))) { // We also take the opportunity to turn virtual paths into physical ones; // this makes it much easier to work with workspaces that list peer // dependencies, since otherwise Ctrl+Click would bring us to the virtual @@ -44,7 +45,7 @@ const moduleWrapper = tsserver => { const resolved = isVirtual(str) ? pnpApi.resolveVirtual(str) : str; if (resolved) { const locator = pnpApi.findPackageLocator(resolved); - if (locator && dependencyTreeRoots.has(`${locator.name}@${locator.reference}`)) { + if (locator && (dependencyTreeRoots.has(`${locator.name}@${locator.reference}`) || isPortal(locator.reference))) { str = resolved; } } @@ -60,10 +61,34 @@ const moduleWrapper = tsserver => { // // Ref: https://github.com/microsoft/vscode/issues/105014#issuecomment-686760910 // - case `vscode`: { + // 2021-10-08: VSCode changed the format in 1.61. + // Before | ^zip:/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + // 2022-04-06: VSCode changed the format in 1.66. + // Before | ^/zip//c:/foo/bar.zip/package.json + // After | ^/zip/c:/foo/bar.zip/package.json + // + // 2022-05-06: VSCode changed the format in 1.68 + // Before | ^/zip/c:/foo/bar.zip/package.json + // After | ^/zip//c:/foo/bar.zip/package.json + // + case `vscode <1.61`: { str = `^zip:${str}`; } break; + case `vscode <1.66`: { + str = `^/zip/${str}`; + } break; + + case `vscode <1.68`: { + str = `^/zip${str}`; + } break; + + case `vscode`: { + str = `^/zip/${str}`; + } break; + // To make "go to definition" work, // We have to resolve the actual file system path from virtual path // and convert scheme to supported by [vim-rzip](https://github.com/lbrayner/vim-rzip) @@ -77,7 +102,7 @@ const moduleWrapper = tsserver => { // everything else is up to neovim case `neovim`: { str = normalize(resolved).replace(/\.zip\//, `.zip::`); - str = `zipfile:${str}`; + str = `zipfile://${str}`; } break; default: { @@ -91,9 +116,28 @@ const moduleWrapper = tsserver => { } function fromEditorPath(str) { - return process.platform === `win32` - ? str.replace(/^\^?zip:\//, ``) - : str.replace(/^\^?zip:/, ``); + switch (hostInfo) { + case `coc-nvim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for coc-nvim is in format of //zipfile://.yarn/... + // So in order to convert it back, we use .* to match all the thing + // before `zipfile:` + return process.platform === `win32` + ? str.replace(/^.*zipfile:\//, ``) + : str.replace(/^.*zipfile:/, ``); + } break; + + case `neovim`: { + str = str.replace(/\.zip::/, `.zip/`); + // The path for neovim is in format of zipfile:////.yarn/... + return str.replace(/^zipfile:\/\//, ``); + } break; + + case `vscode`: + default: { + return str.replace(/^\^?(zip:|\/zip(\/ts-nul-authority)?)\/+/, process.platform === `win32` ? `` : `/`) + } break; + } } // Force enable 'allowLocalPluginLoads' @@ -119,8 +163,9 @@ const moduleWrapper = tsserver => { let hostInfo = `unknown`; Object.assign(Session.prototype, { - onMessage(/** @type {string} */ message) { - const parsedMessage = JSON.parse(message) + onMessage(/** @type {string | object} */ message) { + const isStringMessage = typeof message === 'string'; + const parsedMessage = isStringMessage ? JSON.parse(message) : message; if ( parsedMessage != null && @@ -129,11 +174,32 @@ const moduleWrapper = tsserver => { typeof parsedMessage.arguments.hostInfo === `string` ) { hostInfo = parsedMessage.arguments.hostInfo; + if (hostInfo === `vscode` && process.env.VSCODE_IPC_HOOK) { + const [, major, minor] = (process.env.VSCODE_IPC_HOOK.match( + // The RegExp from https://semver.org/ but without the caret at the start + /(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ + ) ?? []).map(Number) + + if (major === 1) { + if (minor < 61) { + hostInfo += ` <1.61`; + } else if (minor < 66) { + hostInfo += ` <1.66`; + } else if (minor < 68) { + hostInfo += ` <1.68`; + } + } + } } - return originalOnMessage.call(this, JSON.stringify(parsedMessage, (key, value) => { - return typeof value === `string` ? fromEditorPath(value) : value; - })); + const processedMessageJSON = JSON.stringify(parsedMessage, (key, value) => { + return typeof value === 'string' ? fromEditorPath(value) : value; + }); + + return originalOnMessage.call( + this, + isStringMessage ? processedMessageJSON : JSON.parse(processedMessageJSON) + ); }, send(/** @type {any} */ msg) { diff --git a/tgui/README.md b/tgui/README.md index d0f1d1e08d..c0ff51f2e9 100644 --- a/tgui/README.md +++ b/tgui/README.md @@ -79,7 +79,8 @@ Run `.\bin\tgui.bat` with any of the options listed below. **Available commands:** -- `bin/tgui` - Build the project in production mode. +- `bin/tgui` - (Recommended build option) Build the project in production mode. +- `bin/tgui --pretty` - Check/Prettify all files inside of the packages folder (Mainly Interfaces/Components). Build the project in production mode afterwards. - `bin/tgui --dev` - Launch a development server. - tgui development server provides you with incremental compilation, hot module replacement and logging facilities in all running instances @@ -90,9 +91,9 @@ Run `.\bin\tgui.bat` with any of the options listed below. in the lobby. Start tgui dev server, and once it has finished building, press F5 on any tgui window. You'll know that it's hooked correctly if you see a green bug icon in titlebar and data gets dumped to the console. -- `bin/tgui --dev --reload` - Reload byond cache once. -- `bin/tgui --dev --debug` - Run server with debug logging enabled. -- `bin/tgui --dev --no-hot` - Disable hot module replacement (helps when + - `bin/tgui --dev --reload` - Reload byond cache once. + - `bin/tgui --dev --debug` - Run server with debug logging enabled. + - `bin/tgui --dev --no-hot` - Disable hot module replacement (helps when doing development on IE8). - `bin/tgui --lint` - Show problems with the code. - `bin/tgui --fix` - Auto-fix problems with the code. @@ -106,7 +107,8 @@ options. You can double-click these batch files to achieve the same thing: -- `bin\tgui.bat` - Build the project in production mode. +- `bin\tgui.bat` - (Recommended build option) Build the project in production mode. +- `bin\tgui-prettybuild.bat` - Prettify all the files inside the packages folder. Build the project in production mode afterwards. - `bin\tgui-dev-server.bat` - Launch a development server. > Remember to always run a full build before submitting a PR. It creates @@ -166,6 +168,23 @@ Press `F11` to toggle the *layout debugger*. It will show outlines of all tgui elements, which makes it easy to understand how everything comes together, and can reveal certain layout bugs which are not normally visible. +## Browser Developer Tools + +To debug TGUI interfaces with browser-style developer tools, there exists a utility +that Microsoft bundles with Windows to debug any Internet Explorer/Trident-using interface, +which BYOND uses. + +This provides invaluable tools such as a local console, a DOM viewer, an interactive debugger, and more. + +The 64-bit version that we use is located at `%windir%\SysWOW64\F12\IEChooser.exe`. +There's also a 32-bit one in `system32\`. + +Simply launch the application after you've opened a TGUI window, and choose the .html name. +This is likely to be something like `tgui-window-1`. There's a refresh button in the top right. + +Unfortunately, it seems this program doesn't have a new target chooser if your window is fully closed +so you'll need to restart it if it disconnects from the window. + ## Project Structure - `/packages` - Each folder here represents a self-contained Node module. diff --git a/tgui/babel.config.js b/tgui/babel.config.js index d8ddb75721..e702c9a711 100644 --- a/tgui/babel.config.js +++ b/tgui/babel.config.js @@ -4,8 +4,9 @@ * @license MIT */ -const createBabelConfig = options => { +const createBabelConfig = (options) => { const { presets = [], plugins = [], removeConsole } = options; + // prettier-ignore return { presets: [ [require.resolve('@babel/preset-typescript'), { @@ -34,7 +35,7 @@ const createBabelConfig = options => { }; }; -module.exports = api => { +module.exports = (api) => { api.cache(true); const mode = process.env.NODE_ENV; return createBabelConfig({ mode }); diff --git a/tgui/bin/tgui-prettybuild.bat b/tgui/bin/tgui-prettybuild.bat new file mode 100644 index 0000000000..fe827e1657 --- /dev/null +++ b/tgui/bin/tgui-prettybuild.bat @@ -0,0 +1,9 @@ +@echo off +rem Copyright (c) 2020 Aleksej Komarov +rem SPDX-License-Identifier: MIT +call powershell.exe -NoLogo -ExecutionPolicy Bypass -File "%~dp0\tgui_.ps1" --pretty %* +rem Pause if launched in a separate shell unless initiated from powershell +echo %PSModulePath% | findstr %USERPROFILE% >NUL +if %errorlevel% equ 0 exit 0 +echo %cmdcmdline% | find /i "/c" +if %errorlevel% equ 0 pause diff --git a/tgui/bin/tgui_.ps1 b/tgui/bin/tgui_.ps1 index a1909fe70e..b451ac0672 100644 --- a/tgui/bin/tgui_.ps1 +++ b/tgui/bin/tgui_.ps1 @@ -54,6 +54,14 @@ function task-bench { yarn tgui:bench @Args } +function task-prettier { + yarn tgui:prettier @Args +} + +function task-prettify { + yarn prettierx --write packages @Args +} + ## Run a linter through all packages function task-lint { yarn run tsc @@ -130,6 +138,16 @@ if ($Args.Length -gt 0) { exit 0 } + if ($Args[0] -eq "--pretty") { + $Rest = $Args | Select-Object -Skip 1 + task-install + task-prettify + task-prettier + task-lint + task-webpack --mode=production + exit 0 + } + ## Analyze the bundle if ($Args[0] -eq "--analyze") { task-install @@ -148,6 +166,7 @@ if ($Args.Length -gt 0) { ## Make a production webpack build if ($Args.Length -eq 0) { task-install + task-prettier task-lint task-webpack --mode=production exit 0 diff --git a/tgui/global.d.ts b/tgui/global.d.ts index 0f69e37153..348cb9c516 100644 --- a/tgui/global.d.ts +++ b/tgui/global.d.ts @@ -27,12 +27,11 @@ type TguiMessage = { [key: string]: any; }; - type ByondType = { /** - * ID of the Byond window this script is running on. - * Can be used as a parameter to winget/winset. - */ + * ID of the Byond window this script is running on. + * Can be used as a parameter to winget/winset. + */ windowId: string; /** @@ -41,8 +40,8 @@ type ByondType = { IS_BYOND: boolean; /** - * Version of Trident engine of Internet Explorer. Null if N/A. - */ + * Version of Trident engine of Internet Explorer. Null if N/A. + */ TRIDENT: number | null; /** @@ -145,20 +144,20 @@ type ByondType = { parseJson(text: string): any; /** - * Sends a message to `/datum/tgui_window` which hosts this window instance. - */ + * Sends a message to `/datum/tgui_window` which hosts this window instance. + */ sendMessage(type: string, payload?: any): void; sendMessage(message: TguiMessage): void; /** - * Subscribe to incoming messages that were sent from `/datum/tgui_window`. - */ + * Subscribe to incoming messages that were sent from `/datum/tgui_window`. + */ subscribe(listener: (type: string, payload: any) => void): void; /** - * Subscribe to incoming messages *of some specific type* - * that were sent from `/datum/tgui_window`. - */ + * Subscribe to incoming messages *of some specific type* + * that were sent from `/datum/tgui_window`. + */ subscribeTo(type: string, listener: (payload: any) => void): void; /** diff --git a/tgui/jest.config.js b/tgui/jest.config.js index e654f0089b..de06e1c229 100644 --- a/tgui/jest.config.js +++ b/tgui/jest.config.js @@ -1,12 +1,7 @@ module.exports = { roots: ['/packages'], - testMatch: [ - '/packages/**/__tests__/*.{js,ts,tsx}', - '/packages/**/*.{spec,test}.{js,ts,tsx}', - ], - testPathIgnorePatterns: [ - '/packages/tgui-bench', - ], + testMatch: ['/packages/**/__tests__/*.{js,ts,tsx}', '/packages/**/*.{spec,test}.{js,ts,tsx}'], + testPathIgnorePatterns: ['/packages/tgui-bench'], testEnvironment: 'jsdom', testRunner: require.resolve('jest-circus/runner'), transform: { diff --git a/tgui/package.json b/tgui/package.json index 7fc6d67cd2..602af0324c 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -7,16 +7,17 @@ "packages/*" ], "scripts": { - "tgui:build": "webpack", "tgui:analyze": "webpack --analyze", + "tgui:bench": "webpack --env TGUI_BENCH=1 && node packages/tgui-bench/index.js", + "tgui:build": "webpack", "tgui:dev": "node --experimental-modules packages/tgui-dev-server/index.js", "tgui:lint": "eslint packages --ext .js,.cjs,.ts,.tsx", + "tgui:prettier": "prettierx --check .", "tgui:sonar": "eslint packages --ext .js,.cjs,.ts,.tsx -c .eslintrc-harder.yml", - "tgui:tsc": "tsc", "tgui:test": "jest --watch", "tgui:test-simple": "CI=true jest --color", "tgui:test-ci": "CI=true jest --color --collect-coverage", - "tgui:bench": "webpack --env TGUI_BENCH=1 && node packages/tgui-bench/index.js" + "tgui:tsc": "tsc" }, "dependencies": { "@babel/core": "^7.18.0", @@ -38,6 +39,7 @@ "common": "workspace:*", "css-loader": "^6.7.1", "eslint": "^8.16.0", + "eslint-config-prettier": "^8.5.0", "eslint-plugin-radar": "^0.2.1", "eslint-plugin-react": "^7.30.0", "eslint-plugin-unused-imports": "^2.0.0", @@ -48,6 +50,7 @@ "jest-environment-jsdom": "^28.1.0", "jsdom": "^19.0.0", "mini-css-extract-plugin": "^2.6.0", + "prettier": "npm:prettierx@0.19.0", "sass": "^1.52.1", "sass-loader": "^13.0.0", "style-loader": "^3.3.1", diff --git a/tgui/packages/common/collections.spec.ts b/tgui/packages/common/collections.spec.ts index 58eff7f354..ef35a95cb3 100644 --- a/tgui/packages/common/collections.spec.ts +++ b/tgui/packages/common/collections.spec.ts @@ -1,20 +1,20 @@ -import { range, zip } from "./collections"; +import { range, zip } from './collections'; // Type assertions, these will lint if the types are wrong. -const _zip1: [string, number] = zip(["a"], [1])[0]; +const _zip1: [string, number] = zip(['a'], [1])[0]; -describe("range", () => { - test("range(0, 5)", () => { +describe('range', () => { + test('range(0, 5)', () => { expect(range(0, 5)).toEqual([0, 1, 2, 3, 4]); }); }); -describe("zip", () => { +describe('zip', () => { test("zip(['a', 'b', 'c'], [1, 2, 3, 4])", () => { - expect(zip(["a", "b", "c"], [1, 2, 3, 4])).toEqual([ - ["a", 1], - ["b", 2], - ["c", 3], + expect(zip(['a', 'b', 'c'], [1, 2, 3, 4])).toEqual([ + ['a', 1], + ['b', 2], + ['c', 3], ]); }); }); diff --git a/tgui/packages/common/collections.ts b/tgui/packages/common/collections.ts index f0a8bfeba3..623d534a3f 100644 --- a/tgui/packages/common/collections.ts +++ b/tgui/packages/common/collections.ts @@ -14,40 +14,31 @@ * * @returns {any[]} */ -export const filter = (iterateeFn: ( - input: T, - index: number, - collection: T[], -) => boolean) => - (collection: T[]): T[] => { - if (collection === null || collection === undefined) { - return collection; - } - if (Array.isArray(collection)) { - const result: T[] = []; - for (let i = 0; i < collection.length; i++) { - const item = collection[i]; - if (iterateeFn(item, i, collection)) { - result.push(item); - } +export const filter = + (iterateeFn: (input: T, index: number, collection: T[]) => boolean) => + (collection: T[]): T[] => { + if (collection === null || collection === undefined) { + return collection; + } + if (Array.isArray(collection)) { + const result: T[] = []; + for (let i = 0; i < collection.length; i++) { + const item = collection[i]; + if (iterateeFn(item, i, collection)) { + result.push(item); } - return result; } - throw new Error(`filter() can't iterate on type ${typeof collection}`); - }; + return result; + } + throw new Error(`filter() can't iterate on type ${typeof collection}`); + }; type MapFunction = { - (iterateeFn: ( - value: T, - index: number, - collection: T[], - ) => U): (collection: T[]) => U[]; + (iterateeFn: (value: T, index: number, collection: T[]) => U): (collection: T[]) => U[]; - (iterateeFn: ( - value: T, - index: K, - collection: Record, - ) => U): (collection: Record) => U[]; + (iterateeFn: (value: T, index: K, collection: Record) => U): ( + collection: Record + ) => U[]; }; /** @@ -58,7 +49,8 @@ type MapFunction = { * If collection is 'null' or 'undefined', it will be returned "as is" * without emitting any errors (which can be useful in some cases). */ -export const map: MapFunction = (iterateeFn) => +export const map: MapFunction = + (iterateeFn) => (collection: T[]): U[] => { if (collection === null || collection === undefined) { return collection; @@ -102,22 +94,22 @@ const COMPARATOR = (objA, objB) => { * * @returns {any[]} */ -export const sortBy = ( - ...iterateeFns: ((input: T) => unknown)[] -) => (array: T[]): T[] => { +export const sortBy = + (...iterateeFns: ((input: T) => unknown)[]) => + (array: T[]): T[] => { if (!Array.isArray(array)) { return array; } let length = array.length; // Iterate over the array to collect criteria to sort it by let mappedArray: { - criteria: unknown[], - value: T, + criteria: unknown[]; + value: T; }[] = []; for (let i = 0; i < length; i++) { const value = array[i]; mappedArray.push({ - criteria: iterateeFns.map(fn => fn(value)), + criteria: iterateeFns.map((fn) => fn(value)), value, }); } @@ -144,15 +136,14 @@ export const range = (start: number, end: number): number[] => /** * A fast implementation of reduce. */ -export const reduce = (reducerFn, initialValue) => array => { +export const reduce = (reducerFn, initialValue) => (array) => { const length = array.length; let i; let result; if (initialValue === undefined) { i = 1; result = array[0]; - } - else { + } else { i = 0; result = initialValue; } @@ -173,15 +164,14 @@ export const reduce = (reducerFn, initialValue) => array => { * is determined by the order they occur in the array. The iteratee is * invoked with one argument: value. */ -export const uniqBy = ( - iterateeFn?: (value: T) => unknown -) => (array: T[]): T[] => { +export const uniqBy = + (iterateeFn?: (value: T) => unknown) => + (array: T[]): T[] => { const { length } = array; const result: T[] = []; const seen: unknown[] = iterateeFn ? [] : result; let index = -1; - outer: - while (++index < length) { + outer: while (++index < length) { let value: T | 0 = array[index]; const computed = iterateeFn ? iterateeFn(value) : value; if (computed === computed) { @@ -195,8 +185,7 @@ export const uniqBy = ( seen.push(computed); } result.push(value); - } - else if (!seen.includes(computed)) { + } else if (!seen.includes(computed)) { if (seen !== result) { seen.push(computed); } @@ -242,7 +231,8 @@ export const zip = (...arrays: T): Zip => { * specify how grouped values should be combined. The iteratee is * invoked with the elements of each group. */ -export const zipWith = (iterateeFn: (...values: T[]) => U) => +export const zipWith = + (iterateeFn: (...values: T[]) => U) => (...arrays: T[][]): U[] => { return map((values: T[]) => iterateeFn(...values))(zip(...arrays)); }; diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js index 510579bc26..2172742476 100644 --- a/tgui/packages/common/color.js +++ b/tgui/packages/common/color.js @@ -22,23 +22,14 @@ export class Color { /** * Creates a color from the CSS hex color notation. */ -Color.fromHex = hex => ( - new Color( - parseInt(hex.substr(1, 2), 16), - parseInt(hex.substr(3, 2), 16), - parseInt(hex.substr(5, 2), 16)) -); +Color.fromHex = (hex) => + new Color(parseInt(hex.substr(1, 2), 16), parseInt(hex.substr(3, 2), 16), parseInt(hex.substr(5, 2), 16)); /** * Linear interpolation of two colors. */ -Color.lerp = (c1, c2, n) => ( - new Color( - (c2.r - c1.r) * n + c1.r, - (c2.g - c1.g) * n + c1.g, - (c2.b - c1.b) * n + c1.b, - (c2.a - c1.a) * n + c1.a) -); +Color.lerp = (c1, c2, n) => + new Color((c2.r - c1.r) * n + c1.r, (c2.g - c1.g) * n + c1.g, (c2.b - c1.b) * n + c1.b, (c2.a - c1.a) * n + c1.a); /** * Loops up the color in the provided list of colors diff --git a/tgui/packages/common/events.js b/tgui/packages/common/events.js index 6d590a3445..7eeff511aa 100644 --- a/tgui/packages/common/events.js +++ b/tgui/packages/common/events.js @@ -19,10 +19,9 @@ export class EventEmitter { if (!listeners) { throw new Error(`There is no listeners for "${name}"`); } - this.listeners[name] = listeners - .filter(existingListener => { - return existingListener !== listener; - }); + this.listeners[name] = listeners.filter((existingListener) => { + return existingListener !== listener; + }); } emit(name, ...params) { diff --git a/tgui/packages/common/fp.js b/tgui/packages/common/fp.js index 7aa00a00f3..990c7c53c5 100644 --- a/tgui/packages/common/fp.js +++ b/tgui/packages/common/fp.js @@ -9,19 +9,20 @@ * functions, where each successive invocation is supplied the return * value of the previous. */ -export const flow = (...funcs) => (input, ...rest) => { - let output = input; - for (let func of funcs) { - // Recurse into the array of functions - if (Array.isArray(func)) { - output = flow(...func)(output, ...rest); +export const flow = + (...funcs) => + (input, ...rest) => { + let output = input; + for (let func of funcs) { + // Recurse into the array of functions + if (Array.isArray(func)) { + output = flow(...func)(output, ...rest); + } else if (func) { + output = func(output, ...rest); + } } - else if (func) { - output = func(output, ...rest); - } - } - return output; -}; + return output; + }; /** * Composes single-argument functions from right to left. @@ -37,11 +38,14 @@ export const flow = (...funcs) => (input, ...rest) => { */ export const compose = (...funcs) => { if (funcs.length === 0) { - return arg => arg; + return (arg) => arg; } if (funcs.length === 1) { return funcs[0]; } - return funcs.reduce((a, b) => (value, ...rest) => - a(b(value, ...rest), ...rest)); + return funcs.reduce( + (a, b) => + (value, ...rest) => + a(b(value, ...rest), ...rest) + ); }; diff --git a/tgui/packages/common/math.ts b/tgui/packages/common/math.ts index 97e6b60b2e..9dc1d65569 100644 --- a/tgui/packages/common/math.ts +++ b/tgui/packages/common/math.ts @@ -14,7 +14,7 @@ export const clamp = (value, min, max) => { /** * Limits a number between 0 and 1. */ -export const clamp01 = value => { +export const clamp01 = (value) => { return value < 0 ? 0 : value > 1 ? 1 : value; }; @@ -69,9 +69,7 @@ export const toFixed = (value, fractionDigits = 0) => { * Range is an array of two numbers, for example: [0, 15]. */ export const inRange = (value, range) => { - return range - && value >= range[0] - && value <= range[1]; + return range && value >= range[0] && value <= range[1]; }; /** @@ -92,7 +90,7 @@ export const keyOfMatchingRange = (value, ranges) => { /** * Get number of digits following the decimal point in a number */ -export const numberOfDecimalDigits = value => { +export const numberOfDecimalDigits = (value) => { if (Math.floor(value) !== value) { return value.toString().split('.')[1].length || 0; } diff --git a/tgui/packages/common/perf.js b/tgui/packages/common/perf.js index 8414971f93..5b9e377f7c 100644 --- a/tgui/packages/common/perf.js +++ b/tgui/packages/common/perf.js @@ -48,10 +48,9 @@ const measure = (markerNameA, markerNameB) => { } }; -const formatDuration = duration => { +const formatDuration = (duration) => { const durationInFrames = duration / FRAME_DURATION; - return duration.toFixed(duration < 10 ? 1 : 0) + 'ms ' - + '(' + durationInFrames.toFixed(2) + ' frames)'; + return duration.toFixed(duration < 10 ? 1 : 0) + 'ms ' + '(' + durationInFrames.toFixed(2) + ' frames)'; }; export const perf = { diff --git a/tgui/packages/common/react.ts b/tgui/packages/common/react.ts index c8a08f0493..6789bb4edc 100644 --- a/tgui/packages/common/react.ts +++ b/tgui/packages/common/react.ts @@ -24,7 +24,7 @@ export const classes = (classNames: (string | BooleanLike)[]) => { */ export const normalizeChildren = (children: T | T[]) => { if (Array.isArray(children)) { - return children.flat().filter(value => value) as T[]; + return children.flat().filter((value) => value) as T[]; } if (typeof children === 'object') { return [children]; @@ -64,9 +64,7 @@ export const pureComponentHooks = { * A helper to determine whether the object is renderable by React. */ export const canRender = (value: unknown) => { - return value !== undefined - && value !== null - && typeof value !== 'boolean'; + return value !== undefined && value !== null && typeof value !== 'boolean'; }; /** diff --git a/tgui/packages/common/redux.js b/tgui/packages/common/redux.js index ebed11f166..8718dccc0c 100644 --- a/tgui/packages/common/redux.js +++ b/tgui/packages/common/redux.js @@ -20,11 +20,11 @@ export const createStore = (reducer, enhancer) => { const getState = () => currentState; - const subscribe = listener => { + const subscribe = (listener) => { listeners.push(listener); }; - const dispatch = action => { + const dispatch = (action) => { currentState = reducer(currentState, action); for (let i = 0; i < listeners.length; i++) { listeners[i](); @@ -49,27 +49,27 @@ export const createStore = (reducer, enhancer) => { * actions. */ export const applyMiddleware = (...middlewares) => { - return createStore => (reducer, ...args) => { - const store = createStore(reducer, ...args); + return (createStore) => + (reducer, ...args) => { + const store = createStore(reducer, ...args); - let dispatch = () => { - throw new Error( - 'Dispatching while constructing your middleware is not allowed.'); + let dispatch = () => { + throw new Error('Dispatching while constructing your middleware is not allowed.'); + }; + + const storeApi = { + getState: store.getState, + dispatch: (action, ...args) => dispatch(action, ...args), + }; + + const chain = middlewares.map((middleware) => middleware(storeApi)); + dispatch = compose(...chain)(store.dispatch); + + return { + ...store, + dispatch, + }; }; - - const storeApi = { - getState: store.getState, - dispatch: (action, ...args) => dispatch(action, ...args), - }; - - const chain = middlewares.map(middleware => middleware(storeApi)); - dispatch = compose(...chain)(store.dispatch); - - return { - ...store, - dispatch, - }; - }; }; /** @@ -80,7 +80,7 @@ export const applyMiddleware = (...middlewares) => { * in the state that are not present in the reducers object. This function * is also more flexible than the redux counterpart. */ -export const combineReducers = reducersObj => { +export const combineReducers = (reducersObj) => { const keys = Object.keys(reducersObj); let hasChanged = false; return (prevState = {}, action) => { @@ -94,9 +94,7 @@ export const combineReducers = reducersObj => { nextState[key] = nextDomainState; } } - return hasChanged - ? nextState - : prevState; + return hasChanged ? nextState : prevState; }; }; @@ -136,15 +134,14 @@ export const createAction = (type, prepare = null) => { }; actionCreator.toString = () => '' + type; actionCreator.type = type; - actionCreator.match = action => action.type === type; + actionCreator.match = (action) => action.type === type; return actionCreator; }; - // Implementation specific // -------------------------------------------------------- -export const useDispatch = context => { +export const useDispatch = (context) => { return context.store.dispatch; }; diff --git a/tgui/packages/common/storage.js b/tgui/packages/common/storage.js index 83dc6d99c1..5d9da98132 100644 --- a/tgui/packages/common/storage.js +++ b/tgui/packages/common/storage.js @@ -17,11 +17,10 @@ const INDEXED_DB_STORE_NAME = 'storage-v1'; const READ_ONLY = 'readonly'; const READ_WRITE = 'readwrite'; -const testGeneric = testFn => () => { +const testGeneric = (testFn) => () => { try { return Boolean(testFn()); - } - catch { + } catch { return false; } }; @@ -29,14 +28,11 @@ const testGeneric = testFn => () => { // Localstorage can sometimes throw an error, even if DOM storage is not // disabled in IE11 settings. // See: https://superuser.com/questions/1080011 -const testLocalStorage = testGeneric(() => ( - window.localStorage && window.localStorage.getItem -)); +const testLocalStorage = testGeneric(() => window.localStorage && window.localStorage.getItem); -const testIndexedDb = testGeneric(() => ( - (window.indexedDB || window.msIndexedDB) - && (window.IDBTransaction || window.msIDBTransaction) -)); +const testIndexedDb = testGeneric( + () => (window.indexedDB || window.msIndexedDB) && (window.IDBTransaction || window.msIDBTransaction) +); class MemoryBackend { constructor() { @@ -96,8 +92,7 @@ class IndexedDbBackend { req.onupgradeneeded = () => { try { req.result.createObjectStore(INDEXED_DB_STORE_NAME); - } - catch (err) { + } catch (err) { reject(new Error('Failed to upgrade IDB: ' + req.error)); } }; @@ -109,9 +104,7 @@ class IndexedDbBackend { } getStore(mode) { - return this.dbPromise.then(db => db - .transaction(INDEXED_DB_STORE_NAME, mode) - .objectStore(INDEXED_DB_STORE_NAME)); + return this.dbPromise.then((db) => db.transaction(INDEXED_DB_STORE_NAME, mode).objectStore(INDEXED_DB_STORE_NAME)); } async get(key) { @@ -161,8 +154,7 @@ class StorageProxy { const backend = new IndexedDbBackend(); await backend.dbPromise; return backend; - } - catch {} + } catch {} } if (testLocalStorage()) { return new LocalStorageBackend(); diff --git a/tgui/packages/common/string.babel-plugin.cjs b/tgui/packages/common/string.babel-plugin.cjs index 68295aefcf..97ca67c6ea 100644 --- a/tgui/packages/common/string.babel-plugin.cjs +++ b/tgui/packages/common/string.babel-plugin.cjs @@ -19,7 +19,7 @@ /** * Removes excess whitespace and indentation from the string. */ -const multiline = str => { +const multiline = (str) => { const lines = str.split('\n'); // Determine base indentation let minIndent; @@ -40,15 +40,15 @@ const multiline = str => { // Remove this base indentation and trim the resulting string // from both ends. return lines - .map(line => line.substr(minIndent).trimRight()) + .map((line) => line.substr(minIndent).trimRight()) .join('\n') .trim(); }; -const StringPlugin = ref => { +const StringPlugin = (ref) => { return { visitor: { - TaggedTemplateExpression: path => { + TaggedTemplateExpression: (path) => { if (path.node.tag.name === 'multiline') { const { quasi } = path.node; if (quasi.expressions.length > 0) { diff --git a/tgui/packages/common/string.js b/tgui/packages/common/string.js index 4278a1fb3e..d80caf8da1 100644 --- a/tgui/packages/common/string.js +++ b/tgui/packages/common/string.js @@ -7,7 +7,7 @@ /** * Removes excess whitespace and indentation from the string. */ -export const multiline = str => { +export const multiline = (str) => { if (Array.isArray(str)) { // Small stub to allow usage as a template tag return multiline(str.join('')); @@ -32,7 +32,7 @@ export const multiline = str => { // Remove this base indentation and trim the resulting string // from both ends. return lines - .map(line => line.substr(minIndent).trimRight()) + .map((line) => line.substr(minIndent).trimRight()) .join('\n') .trim(); }; @@ -44,12 +44,17 @@ export const multiline = str => { * * Example: createGlobPattern('*@domain')('user@domain') === true */ -export const createGlobPattern = pattern => { - const escapeString = str => str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); - const regex = new RegExp('^' - + pattern.split(/\*+/).map(escapeString).join('.*') - + '$'); - return str => regex.test(str); +export const createGlobPattern = (pattern) => { + const escapeString = (str) => str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); + const regex = new RegExp( + '^' + + pattern + .split(/\*+/) + .map(escapeString) + .join('.*') + + '$' + ); + return (str) => regex.test(str); }; /** @@ -64,7 +69,7 @@ export const createGlobPattern = pattern => { */ export const createSearch = (searchText, stringifier) => { const preparedSearchText = searchText.toLowerCase().trim(); - return obj => { + return (obj) => { if (!preparedSearchText) { return true; } @@ -72,17 +77,15 @@ export const createSearch = (searchText, stringifier) => { if (!str) { return false; } - return str - .toLowerCase() - .includes(preparedSearchText); + return str.toLowerCase().includes(preparedSearchText); }; }; -export const isUppercase = chr => { +export const isUppercase = (chr) => { return chr.toUpperCase() === chr; }; -export const capitalize = str => { +export const capitalize = (str) => { // Handle array if (Array.isArray(str)) { return str.map(capitalize); @@ -95,7 +98,7 @@ export const capitalize = str => { return chr.toUpperCase() + str.slice(1).toLowerCase(); }; -export const toTitleCase = str => { +export const toTitleCase = (str) => { // Handle array if (Array.isArray(str)) { return str.map(toTitleCase); @@ -107,19 +110,38 @@ export const toTitleCase = str => { // Handle string const WORDS_UPPER = ['Id', 'Tv', 'Rcd']; // VOREStation Edit const WORDS_LOWER = [ - 'A', 'An', 'And', 'As', 'At', 'But', 'By', 'For', 'For', 'From', 'In', - 'Into', 'Near', 'Nor', 'Of', 'On', 'Onto', 'Or', 'The', 'To', 'With', + 'A', + 'An', + 'And', + 'As', + 'At', + 'But', + 'By', + 'For', + 'For', + 'From', + 'In', + 'Into', + 'Near', + 'Nor', + 'Of', + 'On', + 'Onto', + 'Or', + 'The', + 'To', + 'With', ]; - let currentStr = str.replace(/([^\W_]+[^\s-]*) */g, str => { + let currentStr = str.replace(/([^\W_]+[^\s-]*) */g, (str) => { return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase(); }); for (let word of WORDS_LOWER) { const regex = new RegExp('\\s' + word + '\\s', 'g'); - currentStr = currentStr.replace(regex, str => str.toLowerCase()); + currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); } for (let word of WORDS_UPPER) { const regex = new RegExp('\\b' + word + '\\b', 'g'); - currentStr = currentStr.replace(regex, str => str.toUpperCase()); + currentStr = currentStr.replace(regex, (str) => str.toUpperCase()); } return currentStr; }; @@ -130,7 +152,7 @@ export const toTitleCase = str => { * @param {String} str Encoded HTML string * @return {String} Decoded HTML string */ -export const decodeHtmlEntities = str => { +export const decodeHtmlEntities = (str) => { if (!str) { return str; } @@ -142,31 +164,33 @@ export const decodeHtmlEntities = str => { quot: '"', lt: '<', gt: '>', - apos: '\'', + apos: "'", trade: 'â„¢', }; - return str - // Newline tags - .replace(/
    /gi, '\n') - .replace(/<\/?[a-z0-9-_]+[^>]*>/gi, '') - // Basic entities - .replace(translate_re, (match, entity) => translate[entity]) - // Decimal entities - .replace(/&#?([0-9]+);/gi, (match, numStr) => { - const num = parseInt(numStr, 10); - return String.fromCharCode(num); - }) - // Hex entities - .replace(/&#x?([0-9a-f]+);/gi, (match, numStr) => { - const num = parseInt(numStr, 16); - return String.fromCharCode(num); - }); + return ( + str + // Newline tags + .replace(/
    /gi, '\n') + .replace(/<\/?[a-z0-9-_]+[^>]*>/gi, '') + // Basic entities + .replace(translate_re, (match, entity) => translate[entity]) + // Decimal entities + .replace(/&#?([0-9]+);/gi, (match, numStr) => { + const num = parseInt(numStr, 10); + return String.fromCharCode(num); + }) + // Hex entities + .replace(/&#x?([0-9a-f]+);/gi, (match, numStr) => { + const num = parseInt(numStr, 16); + return String.fromCharCode(num); + }) + ); }; /** * Converts an object into a query string, */ -export const buildQueryString = obj => Object.keys(obj) - .map(key => encodeURIComponent(key) - + '=' + encodeURIComponent(obj[key])) - .join('&'); +export const buildQueryString = (obj) => + Object.keys(obj) + .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(obj[key])) + .join('&'); diff --git a/tgui/packages/common/timer.js b/tgui/packages/common/timer.js index 1177071b9c..4f42c37e4a 100644 --- a/tgui/packages/common/timer.js +++ b/tgui/packages/common/timer.js @@ -33,6 +33,4 @@ export const debounce = (fn, time, immediate = false) => { * * @param {number} time */ -export const sleep = time => ( - new Promise(resolve => setTimeout(resolve, time)) -); +export const sleep = (time) => new Promise((resolve) => setTimeout(resolve, time)); diff --git a/tgui/packages/common/types.ts b/tgui/packages/common/types.ts index a92ac122d9..aab2213da7 100644 --- a/tgui/packages/common/types.ts +++ b/tgui/packages/common/types.ts @@ -1,5 +1,4 @@ /** * Returns the arguments of a function F as an array. */ -export type ArgumentsOf - = F extends (...args: infer A) => unknown ? A : never; +export type ArgumentsOf = F extends (...args: infer A) => unknown ? A : never; diff --git a/tgui/packages/common/uuid.js b/tgui/packages/common/uuid.js index 7721af6494..f2eb4bb98f 100644 --- a/tgui/packages/common/uuid.js +++ b/tgui/packages/common/uuid.js @@ -11,9 +11,9 @@ */ export const createUuid = () => { let d = new Date().getTime(); - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { const r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); - return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); + return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16); }); }; diff --git a/tgui/packages/common/vector.js b/tgui/packages/common/vector.js index c3ac350a4e..b1f85f7429 100644 --- a/tgui/packages/common/vector.js +++ b/tgui/packages/common/vector.js @@ -32,17 +32,17 @@ export const vecDivide = (...vecs) => { }; export const vecScale = (vec, n) => { - return map(x => x * n)(vec); + return map((x) => x * n)(vec); }; -export const vecInverse = vec => { - return map(x => -x)(vec); +export const vecInverse = (vec) => { + return map((x) => -x)(vec); }; -export const vecLength = vec => { +export const vecLength = (vec) => { return Math.sqrt(reduce(ADD)(zipWith(MUL)(vec, vec))); }; -export const vecNormalize = vec => { +export const vecNormalize = (vec) => { return vecDivide(vec, vecLength(vec)); }; diff --git a/tgui/packages/tgfont/dist/tgfont.css b/tgui/packages/tgfont/dist/tgfont.css index ad732b8fc0..24f875594b 100644 --- a/tgui/packages/tgfont/dist/tgfont.css +++ b/tgui/packages/tgfont/dist/tgfont.css @@ -1,50 +1,51 @@ @font-face { - font-family: "tgfont"; - src: url("./tgfont.woff2?45c3c7acc69dd413375d77898d24e41e") format("woff2"), -url("./tgfont.eot?45c3c7acc69dd413375d77898d24e41e#iefix") format("embedded-opentype"); + font-family: 'tgfont'; + src: url('./tgfont.woff2?45c3c7acc69dd413375d77898d24e41e') format('woff2'), + url('./tgfont.eot?45c3c7acc69dd413375d77898d24e41e#iefix') format('embedded-opentype'); } -i[class^="tg-"]:before, i[class*=" tg-"]:before { - font-family: tgfont !important; - font-style: normal; - font-weight: normal !important; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; +i[class^='tg-']:before, +i[class*=' tg-']:before { + font-family: tgfont !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } .tg-air-tank-slash:before { - content: "\f101"; + content: '\f101'; } .tg-air-tank:before { - content: "\f102"; + content: '\f102'; } .tg-bad-touch:before { - content: "\f103"; + content: '\f103'; } .tg-image-minus:before { - content: "\f104"; + content: '\f104'; } .tg-image-plus:before { - content: "\f105"; + content: '\f105'; } .tg-nanotrasen-logo:before { - content: "\f106"; + content: '\f106'; } .tg-non-binary:before { - content: "\f107"; + content: '\f107'; } .tg-prosthetic-leg:before { - content: "\f108"; + content: '\f108'; } .tg-sound-minus:before { - content: "\f109"; + content: '\f109'; } .tg-sound-plus:before { - content: "\f10a"; + content: '\f10a'; } .tg-syndicate-logo:before { - content: "\f10b"; + content: '\f10b'; } diff --git a/tgui/packages/tgfont/icons/ATTRIBUTIONS.md b/tgui/packages/tgfont/icons/ATTRIBUTIONS.md index 2f218388d3..0491b90e72 100644 --- a/tgui/packages/tgfont/icons/ATTRIBUTIONS.md +++ b/tgui/packages/tgfont/icons/ATTRIBUTIONS.md @@ -1,6 +1,8 @@ bad-touch.svg contains: + - hug by Phạm Thanh Lộc from the Noun Project - Fight by Rudez Studio from the Noun Project prosthetic-leg.svg contains: + - prosthetic leg by Gan Khoon Lay from the Noun Project diff --git a/tgui/packages/tgfont/mkdist.cjs b/tgui/packages/tgfont/mkdist.cjs index 5c628becf9..85634bd265 100644 --- a/tgui/packages/tgfont/mkdist.cjs +++ b/tgui/packages/tgfont/mkdist.cjs @@ -10,5 +10,4 @@ process.chdir(__dirname); // Silently make a dist folder try { require('fs').mkdirSync('dist'); -} -catch (err) {} +} catch (err) {} diff --git a/tgui/packages/tgui-bench/entrypoint.tsx b/tgui/packages/tgui-bench/entrypoint.tsx index d41d667894..a6eb7a91d6 100644 --- a/tgui/packages/tgui-bench/entrypoint.tsx +++ b/tgui/packages/tgui-bench/entrypoint.tsx @@ -62,8 +62,7 @@ const setupApp = async () => { } suite.run(); }); - } - catch (error) { + } catch (error) { sendMessage({ type: 'error', error }); } } diff --git a/tgui/packages/tgui-bench/index.js b/tgui/packages/tgui-bench/index.js index e29ad9a5c2..b10e0a3e0b 100644 --- a/tgui/packages/tgui-bench/index.js +++ b/tgui/packages/tgui-bench/index.js @@ -27,8 +27,7 @@ const setup = async () => { assets += `\n`; const publicDir = path.resolve(__dirname, '../../public'); - const page = fs.readFileSync(path.join(publicDir, 'tgui.html'), 'utf-8') - .replace('\n', assets); + const page = fs.readFileSync(path.join(publicDir, 'tgui.html'), 'utf-8').replace('\n', assets); server.register(require('@fastify/static'), { root: publicDir, @@ -67,8 +66,7 @@ const setup = async () => { try { await server.listen(3002, '0.0.0.0'); - } - catch (err) { + } catch (err) { console.error(err); process.exit(1); } diff --git a/tgui/packages/tgui-bench/lib/benchmark.d.ts b/tgui/packages/tgui-bench/lib/benchmark.d.ts index 7f3310005f..6ddad41fd8 100644 --- a/tgui/packages/tgui-bench/lib/benchmark.d.ts +++ b/tgui/packages/tgui-bench/lib/benchmark.d.ts @@ -11,11 +11,7 @@ declare class Benchmark { static filter(arr: T[], filter: string, thisArg?: any): T[]; static formatNumber(num: number): string; static join(obj: Object, separator1?: string, separator2?: string): string; - static invoke( - benches: Benchmark[], - name: string | Object, - ...args: any[] - ): any[]; + static invoke(benches: Benchmark[], name: string | Object, ...args: any[]): any[]; static runInContext(context: Object): Function; static each(obj: Object | any[], callback: Function, thisArg?: any): void; @@ -24,11 +20,7 @@ declare class Benchmark { static has(obj: Object, path: any[] | string): boolean; static indexOf(arr: T[], value: T, fromIndex?: number): number; static map(arr: T[], callback: (value: T) => K, thisArg?: any): K[]; - static reduce( - arr: T[], - callback: (accumulator: K, value: T) => K, - thisArg?: any - ): K; + static reduce(arr: T[], callback: (accumulator: K, value: T) => K, thisArg?: any): K; static options: Benchmark.Options; static platform: Benchmark.Platform; diff --git a/tgui/packages/tgui-bench/lib/benchmark.js b/tgui/packages/tgui-bench/lib/benchmark.js index 1e76cec708..1e4b8aa760 100644 --- a/tgui/packages/tgui-bench/lib/benchmark.js +++ b/tgui/packages/tgui-bench/lib/benchmark.js @@ -7,7 +7,7 @@ * Manually stripped from useless junk by /tg/station13 maintainers. * Available under MIT license */ -module.exports = (function() { +module.exports = function () { 'use strict'; /** Used as a safe reference for `undefined` in pre ES5 environments. */ @@ -16,7 +16,7 @@ module.exports = (function() { /** Used to determine if values are of the language type Object. */ var objectTypes = { 'function': true, - 'object': true + 'object': true, }; /** Used as a reference to the global object. */ @@ -36,9 +36,24 @@ module.exports = (function() { /** Used to assign default `context` object properties. */ var contextProps = [ - 'Array', 'Date', 'Function', 'Math', 'Object', 'RegExp', 'String', '_', - 'clearTimeout', 'chrome', 'chromium', 'document', 'navigator', 'phantom', - 'platform', 'process', 'runtime', 'setTimeout' + 'Array', + 'Date', + 'Function', + 'Math', + 'Object', + 'RegExp', + 'String', + '_', + 'clearTimeout', + 'chrome', + 'chromium', + 'document', + 'navigator', + 'phantom', + 'platform', + 'process', + 'runtime', + 'setTimeout', ]; /** Used to avoid hz of Infinity. */ @@ -47,7 +62,7 @@ module.exports = (function() { '2': 512, '3': 64, '4': 8, - '5': 0 + '5': 0, }; /** @@ -55,12 +70,37 @@ module.exports = (function() { * For more info see http://www.itl.nist.gov/div898/handbook/eda/section3/eda3672.htm. */ var tTable = { - '1': 12.706, '2': 4.303, '3': 3.182, '4': 2.776, '5': 2.571, '6': 2.447, - '7': 2.365, '8': 2.306, '9': 2.262, '10': 2.228, '11': 2.201, '12': 2.179, - '13': 2.16, '14': 2.145, '15': 2.131, '16': 2.12, '17': 2.11, '18': 2.101, - '19': 2.093, '20': 2.086, '21': 2.08, '22': 2.074, '23': 2.069, '24': 2.064, - '25': 2.06, '26': 2.056, '27': 2.052, '28': 2.048, '29': 2.045, '30': 2.042, - 'infinity': 1.96 + '1': 12.706, + '2': 4.303, + '3': 3.182, + '4': 2.776, + '5': 2.571, + '6': 2.447, + '7': 2.365, + '8': 2.306, + '9': 2.262, + '10': 2.228, + '11': 2.201, + '12': 2.179, + '13': 2.16, + '14': 2.145, + '15': 2.131, + '16': 2.12, + '17': 2.11, + '18': 2.101, + '19': 2.093, + '20': 2.086, + '21': 2.08, + '22': 2.074, + '23': 2.069, + '24': 2.064, + '25': 2.06, + '26': 2.056, + '27': 2.052, + '28': 2.048, + '29': 2.045, + '30': 2.042, + 'infinity': 1.96, }; /** @@ -68,11 +108,11 @@ module.exports = (function() { * For more info see http://www.saburchill.com/IBbiology/stats/003.html. */ var uTable = { - '5': [0, 1, 2], - '6': [1, 2, 3, 5], - '7': [1, 3, 5, 6, 8], - '8': [2, 4, 6, 8, 10, 13], - '9': [2, 4, 7, 10, 12, 15, 17], + '5': [0, 1, 2], + '6': [1, 2, 3, 5], + '7': [1, 3, 5, 6, 8], + '8': [2, 4, 6, 8, 10, 13], + '9': [2, 4, 7, 10, 12, 15, 17], '10': [3, 5, 8, 11, 14, 17, 20, 23], '11': [3, 6, 9, 13, 16, 19, 23, 26, 30], '12': [4, 7, 11, 14, 18, 22, 26, 29, 33, 37], @@ -89,11 +129,24 @@ module.exports = (function() { '23': [9, 17, 24, 32, 40, 48, 56, 64, 73, 81, 89, 98, 106, 115, 123, 132, 140, 149, 157, 166, 175], '24': [10, 17, 25, 33, 42, 50, 59, 67, 76, 85, 94, 102, 111, 120, 129, 138, 147, 156, 165, 174, 183, 192], '25': [10, 18, 27, 35, 44, 53, 62, 71, 80, 89, 98, 107, 117, 126, 135, 145, 154, 163, 173, 182, 192, 201, 211], - '26': [11, 19, 28, 37, 46, 55, 64, 74, 83, 93, 102, 112, 122, 132, 141, 151, 161, 171, 181, 191, 200, 210, 220, 230], - '27': [11, 20, 29, 38, 48, 57, 67, 77, 87, 97, 107, 118, 125, 138, 147, 158, 168, 178, 188, 199, 209, 219, 230, 240, 250], - '28': [12, 21, 30, 40, 50, 60, 70, 80, 90, 101, 111, 122, 132, 143, 154, 164, 175, 186, 196, 207, 218, 228, 239, 250, 261, 272], - '29': [13, 22, 32, 42, 52, 62, 73, 83, 94, 105, 116, 127, 138, 149, 160, 171, 182, 193, 204, 215, 226, 238, 249, 260, 271, 282, 294], - '30': [13, 23, 33, 43, 54, 65, 76, 87, 98, 109, 120, 131, 143, 154, 166, 177, 189, 200, 212, 223, 235, 247, 258, 270, 282, 293, 305, 317] + '26': [ + 11, 19, 28, 37, 46, 55, 64, 74, 83, 93, 102, 112, 122, 132, 141, 151, 161, 171, 181, 191, 200, 210, 220, 230, + ], + '27': [ + 11, 20, 29, 38, 48, 57, 67, 77, 87, 97, 107, 118, 125, 138, 147, 158, 168, 178, 188, 199, 209, 219, 230, 240, 250, + ], + '28': [ + 12, 21, 30, 40, 50, 60, 70, 80, 90, 101, 111, 122, 132, 143, 154, 164, 175, 186, 196, 207, 218, 228, 239, 250, + 261, 272, + ], + '29': [ + 13, 22, 32, 42, 52, 62, 73, 83, 94, 105, 116, 127, 138, 149, 160, 171, 182, 193, 204, 215, 226, 238, 249, 260, + 271, 282, 294, + ], + '30': [ + 13, 23, 33, 43, 54, 65, 76, 87, 98, 109, 120, 131, 143, 154, 166, 177, 189, 200, 212, 223, 235, 247, 258, 270, + 282, 293, 305, 317, + ], }; /*--------------------------------------------------------------------------*/ @@ -108,7 +161,7 @@ module.exports = (function() { */ function runInContext(context) { // Exit early if unable to acquire lodash. - var _ = context && context._ || require('lodash') || root._; + var _ = (context && context._) || require('lodash') || root._; if (!_) { Benchmark.runInContext = runInContext; return Benchmark; @@ -121,32 +174,32 @@ module.exports = (function() { /** Native constructor references. */ var Array = context.Array, - Date = context.Date, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String; + Date = context.Date, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String; /** Used for `Array` and `Object` method references. */ var arrayRef = [], - objectProto = Object.prototype; + objectProto = Object.prototype; /** Native method shortcuts. */ var abs = Math.abs, - clearTimeout = context.clearTimeout, - floor = Math.floor, - log = Math.log, - max = Math.max, - min = Math.min, - pow = Math.pow, - push = arrayRef.push, - setTimeout = context.setTimeout, - shift = arrayRef.shift, - slice = arrayRef.slice, - sqrt = Math.sqrt, - toString = objectProto.toString, - unshift = arrayRef.unshift; + clearTimeout = context.clearTimeout, + floor = Math.floor, + log = Math.log, + max = Math.max, + min = Math.min, + pow = Math.pow, + push = arrayRef.push, + setTimeout = context.setTimeout, + shift = arrayRef.shift, + slice = arrayRef.slice, + sqrt = Math.sqrt, + toString = objectProto.toString, + unshift = arrayRef.unshift; /** Detect DOM document object. */ var doc = isHostType(context, 'document') && context.document; @@ -172,8 +225,7 @@ module.exports = (function() { */ var support = {}; - (function() { - + (function () { /** * Detect if running in a browser environment. * @@ -202,15 +254,22 @@ module.exports = (function() { // See http://webk.it/11609 for more details. // Firefox 3.6 and Opera 9.25 strip grouping parentheses from `Function#toString` results. // See http://bugzil.la/559438 for more details. - support.decompilation = Function( - ('return (' + (function(x) { return { 'x': '' + (1 + x) + '', 'y': 0 }; }) + ')') - // Avoid issues with code added by Istanbul. - .replace(/__cov__[^;]+;/g, '') - )()(0).x === '1'; - } catch(e) { + support.decompilation = + Function( + ( + 'return (' + + function (x) { + return { 'x': '' + (1 + x) + '', 'y': 0 }; + } + + ')' + ) + // Avoid issues with code added by Istanbul. + .replace(/__cov__[^;]+;/g, '') + )()(0).x === '1'; + } catch (e) { support.decompilation = false; } - }()); + })(); /** * Timer object used by `clock()` and `Deferred#resolve`. @@ -219,7 +278,6 @@ module.exports = (function() { * @type Object */ var timer = { - /** * The timer namespace object or constructor. * @@ -245,7 +303,7 @@ module.exports = (function() { * @memberOf timer * @param {Object} deferred The deferred instance. */ - 'stop': null // Lazy defined in `clock()`. + 'stop': null, // Lazy defined in `clock()`. }; /*------------------------------------------------------------------------*/ @@ -342,19 +400,16 @@ module.exports = (function() { if (_.isPlainObject(name)) { // 1 argument (options). options = name; - } - else if (_.isFunction(name)) { + } else if (_.isFunction(name)) { // 2 arguments (fn, options). options = fn; fn = name; - } - else if (_.isPlainObject(fn)) { + } else if (_.isPlainObject(fn)) { // 2 arguments (name, options). options = fn; fn = null; bench.name = name; - } - else { + } else { // 3 arguments (name, fn [, options]). bench.name = name; } @@ -395,7 +450,7 @@ module.exports = (function() { if (type instanceof Event) { return type; } - return (event instanceof Event) + return event instanceof Event ? _.assign(event, { 'timeStamp': _.now() }, typeof type == 'string' ? { 'type': type } : type) : new Event(type); } @@ -470,11 +525,9 @@ module.exports = (function() { * @param {*} value The value to clone. * @returns {*} The cloned value. */ - var cloneDeep = _.partial(_.cloneDeepWith, _, function(value) { + var cloneDeep = _.partial(_.cloneDeepWith, _, function (value) { // Only clone primitives, arrays, and plain objects. - return (_.isObject(value) && !_.isArray(value) && !_.isPlainObject(value)) - ? value - : undefined; + return _.isObject(value) && !_.isArray(value) && !_.isPlainObject(value) ? value : undefined; }); /** @@ -487,10 +540,10 @@ module.exports = (function() { */ function createFunction() { // Lazy define. - createFunction = function(args, body) { + createFunction = function (args, body) { var result, - anchor = freeDefine ? freeDefine.amd : Benchmark, - prop = uid + 'createFunction'; + anchor = freeDefine ? freeDefine.amd : Benchmark, + prop = uid + 'createFunction'; runScript((freeDefine ? 'define.amd.' : 'Benchmark.') + prop + '=function(' + args + '){' + body + '}'); result = anchor[prop]; @@ -499,7 +552,8 @@ module.exports = (function() { }; // Fix JaegerMonkey bug. // For more information see http://bugzil.la/639720. - createFunction = support.browser && (createFunction('', 'return"' + uid + '"') || _.noop)() == uid ? createFunction : Function; + createFunction = + support.browser && (createFunction('', 'return"' + uid + '"') || _.noop)() == uid ? createFunction : Function; return createFunction.apply(null, arguments); } @@ -533,8 +587,7 @@ module.exports = (function() { * @returns {string} The argument name. */ function getFirstArgument(fn) { - return (!_.has(fn, 'toString') && - (/^[\s(]*function[^(]*\(([^\s,)]+)/.exec(fn) || 0)[1]) || ''; + return (!_.has(fn, 'toString') && (/^[\s(]*function[^(]*\(([^\s,)]+)/.exec(fn) || 0)[1]) || ''; } /** @@ -545,9 +598,11 @@ module.exports = (function() { * @returns {number} The mean. */ function getMean(sample) { - return (_.reduce(sample, function(sum, x) { - return sum + x; - }) / sample.length) || 0; + return ( + _.reduce(sample, function (sum, x) { + return sum + x; + }) / sample.length || 0 + ); } /** @@ -569,9 +624,7 @@ module.exports = (function() { result = (result || '').replace(/^\s+|\s+$/g, ''); // Detect strings containing only the "use strict" directive. - return /^(?:\/\*+[\w\W]*?\*\/|\/\/.*?[\n\r\u2028\u2029]|\s)*(["'])use strict\1;?$/.test(result) - ? '' - : result; + return /^(?:\/\*+[\w\W]*?\*\/|\/\/.*?[\n\r\u2028\u2029]|\s)*(["'])use strict\1;?$/.test(result) ? '' : result; } /** @@ -623,11 +676,11 @@ module.exports = (function() { */ function runScript(code) { var anchor = freeDefine ? define.amd : Benchmark, - script = doc.createElement('script'), - sibling = doc.getElementsByTagName('script')[0], - parent = sibling.parentNode, - prop = uid + 'runScript', - prefix = '(' + (freeDefine ? 'define.amd.' : 'Benchmark.') + prop + '||function(){})();'; + script = doc.createElement('script'), + sibling = doc.getElementsByTagName('script')[0], + parent = sibling.parentNode, + prop = uid + 'runScript', + prefix = '(' + (freeDefine ? 'define.amd.' : 'Benchmark.') + prop + '||function(){})();'; // Firefox 2.0.0.2 cannot use script injection as intended because it executes // asynchronously, but that's OK because script injection is only used to avoid @@ -636,8 +689,10 @@ module.exports = (function() { // Remove the inserted script *before* running the code to avoid differences // in the expected script element count/order of the document. script.appendChild(doc.createTextNode(prefix + code)); - anchor[prop] = function() { destroyElement(script); }; - } catch(e) { + anchor[prop] = function () { + destroyElement(script); + }; + } catch (e) { parent = parent.cloneNode(false); sibling = null; script.text = code; @@ -656,11 +711,11 @@ module.exports = (function() { function setOptions(object, options) { options = object.options = _.assign({}, cloneDeep(object.constructor.options), cloneDeep(options)); - _.forOwn(options, function(value, key) { + _.forOwn(options, function (value, key) { if (value != null) { // Add event listeners. if (/^on[A-Z]/.test(key)) { - _.each(key.split(' '), function(key) { + _.each(key.split(' '), function (key) { object.on(key.slice(2).toLowerCase(), value); }); } else if (!_.has(object, key)) { @@ -679,22 +734,22 @@ module.exports = (function() { */ function resolve() { var deferred = this, - clone = deferred.benchmark, - bench = clone._original; + clone = deferred.benchmark, + bench = clone._original; if (bench.aborted) { // cycle() -> clone cycle/complete event -> compute()'s invoked bench.run() cycle/complete. deferred.teardown(); clone.running = false; cycle(deferred); - } - else if (++deferred.cycles < clone.count) { + } else if (++deferred.cycles < clone.count) { clone.compiled.call(deferred, context, timer); - } - else { + } else { timer.stop(deferred); deferred.teardown(); - delay(clone, function() { cycle(deferred); }); + delay(clone, function () { + cycle(deferred); + }); } } @@ -727,18 +782,18 @@ module.exports = (function() { function filter(array, callback) { if (callback === 'successful') { // Callback to exclude those that are errored, unrun, or have hz of Infinity. - callback = function(bench) { + callback = function (bench) { return bench.cycles && _.isFinite(bench.hz) && !bench.error; }; - } - else if (callback === 'fastest' || callback === 'slowest') { + } else if (callback === 'fastest' || callback === 'slowest') { // Get successful, sort by period + margin of error, and filter fastest/slowest. - var result = filter(array, 'successful').sort(function(a, b) { - a = a.stats; b = b.stats; + var result = filter(array, 'successful').sort(function (a, b) { + a = a.stats; + b = b.stats; return (a.mean + a.moe > b.mean + b.moe ? 1 : -1) * (callback === 'fastest' ? 1 : -1); }); - return _.filter(result, function(bench) { + return _.filter(result, function (bench) { return result[0].compare(bench) == 0; }); } @@ -755,8 +810,7 @@ module.exports = (function() { */ function formatNumber(number) { number = String(number).split('.'); - return number[0].replace(/(?=(?:\d{3})+$)(?!\b)/g, ',') + - (number[1] ? '.' + number[1] : ''); + return number[0].replace(/(?=(?:\d{3})+$)(?!\b)/g, ',') + (number[1] ? '.' + number[1] : ''); } /** @@ -800,19 +854,19 @@ module.exports = (function() { */ function invoke(benches, name) { var args, - bench, - queued, - index = -1, - eventProps = { 'currentTarget': benches }, - options = { 'onStart': _.noop, 'onCycle': _.noop, 'onComplete': _.noop }, - result = _.toArray(benches); + bench, + queued, + index = -1, + eventProps = { 'currentTarget': benches }, + options = { 'onStart': _.noop, 'onCycle': _.noop, 'onComplete': _.noop }, + result = _.toArray(benches); /** * Invokes the method of the current object and if synchronous, fetches the next. */ function execute() { var listeners, - async = isAsync(bench); + async = isAsync(bench); if (async) { // Use `getNext` as the first listener. @@ -831,8 +885,8 @@ module.exports = (function() { */ function getNext(event) { var cycleEvent, - last = bench, - async = isAsync(last); + last = bench, + async = isAsync(last); if (async) { last.off('complete', getNext); @@ -849,12 +903,10 @@ module.exports = (function() { bench = queued ? benches[0] : result[index]; if (isAsync(bench)) { delay(bench, execute); - } - else if (async) { + } else if (async) { // Resume execution if previously asynchronous but now synchronous. while (execute()) {} - } - else { + } else { // Continue synchronous execution. return true; } @@ -879,8 +931,11 @@ module.exports = (function() { function isAsync(object) { // Avoid using `instanceof` here because of IE memory leak issues with host objects. var async = args[0] && args[0].async; - return name == 'run' && (object instanceof Benchmark) && - ((async == null ? object.options.async : async) && support.timeout || object.defer); + return ( + name == 'run' && + object instanceof Benchmark && + (((async == null ? object.options.async : async) && support.timeout) || object.defer) + ); } /** @@ -894,9 +949,7 @@ module.exports = (function() { shift.call(benches); } // If we reached the last index then return `false`. - return (queued ? benches.length : index < result.length) - ? index - : (index = false); + return (queued ? benches.length : index < result.length) ? index : (index = false); } // Juggle arguments. if (_.isString(name)) { @@ -906,7 +959,7 @@ module.exports = (function() { // 2 arguments (array, options). options = _.assign(options, name); name = options.name; - args = _.isArray(args = 'args' in options ? options.args : []) ? args : [args]; + args = _.isArray((args = 'args' in options ? options.args : [])) ? args : [args]; queued = options.queued; } // Start iterating over the array. @@ -918,7 +971,7 @@ module.exports = (function() { options.onStart.call(benches, Event(eventProps)); // End early if the suite was aborted in an "onStart" listener. - if (name == 'run' && (benches instanceof Suite) && benches.aborted) { + if (name == 'run' && benches instanceof Suite && benches.aborted) { // Emit "cycle" event. eventProps.type = 'cycle'; options.onCycle.call(benches, Event(eventProps)); @@ -950,11 +1003,11 @@ module.exports = (function() { */ function join(object, separator1, separator2) { var result = [], - length = (object = Object(object)).length, - arrayLike = length === length >>> 0; + length = (object = Object(object)).length, + arrayLike = length === length >>> 0; separator2 || (separator2 = ': '); - _.each(object, function(value, key) { + _.each(object, function (value, key) { result.push(arrayLike ? value : key + separator2 + value); }); return result.join(separator1 || ','); @@ -971,8 +1024,8 @@ module.exports = (function() { */ function abortSuite() { var event, - suite = this, - resetting = calledBy.resetSuite; + suite = this, + resetting = calledBy.resetSuite; if (suite.running) { event = Event('abort'); @@ -1031,10 +1084,10 @@ module.exports = (function() { */ function add(name, fn, options) { var suite = this, - bench = new Benchmark(name, fn, options), - event = Event({ 'type': 'add', 'target': bench }); + bench = new Benchmark(name, fn, options), + event = Event({ 'type': 'add', 'target': bench }); - if (suite.emit(event), !event.cancelled) { + if ((suite.emit(event), !event.cancelled)) { suite.push(bench); } return suite; @@ -1050,14 +1103,12 @@ module.exports = (function() { */ function cloneSuite(options) { var suite = this, - result = new suite.constructor(_.assign({}, suite.options, options)); + result = new suite.constructor(_.assign({}, suite.options, options)); // Copy own properties. - _.forOwn(suite, function(value, key) { + _.forOwn(suite, function (value, key) { if (!_.has(result, key)) { - result[key] = value && _.isFunction(value.clone) - ? value.clone() - : cloneDeep(value); + result[key] = value && _.isFunction(value.clone) ? value.clone() : cloneDeep(value); } }); return result; @@ -1073,7 +1124,7 @@ module.exports = (function() { */ function filterSuite(callback) { var suite = this, - result = new suite.constructor(suite.options); + result = new suite.constructor(suite.options); result.push.apply(result, filter(suite, callback)); return result; @@ -1088,8 +1139,8 @@ module.exports = (function() { */ function resetSuite() { var event, - suite = this, - aborting = calledBy.abortSuite; + suite = this, + aborting = calledBy.abortSuite; if (suite.running && !aborting) { // No worries, `resetSuite()` is called within `abortSuite()`. @@ -1098,8 +1149,7 @@ module.exports = (function() { delete calledBy.resetSuite; } // Reset if the state has changed. - else if ((suite.aborted || suite.running) && - (suite.emit(event = Event('reset')), !event.cancelled)) { + else if ((suite.aborted || suite.running) && (suite.emit((event = Event('reset'))), !event.cancelled)) { suite.aborted = suite.running = false; if (!aborting) { invoke(suite, 'reset'); @@ -1134,10 +1184,10 @@ module.exports = (function() { 'name': 'run', 'args': options, 'queued': options.queued, - 'onStart': function(event) { + 'onStart': function (event) { suite.emit(event); }, - 'onCycle': function(event) { + 'onCycle': function (event) { var bench = event.target; if (bench.error) { suite.emit({ 'type': 'error', 'target': bench }); @@ -1145,10 +1195,10 @@ module.exports = (function() { suite.emit(event); event.aborted = suite.aborted; }, - 'onComplete': function(event) { + 'onComplete': function (event) { suite.running = false; suite.emit(event); - } + }, }); return suite; } @@ -1165,17 +1215,17 @@ module.exports = (function() { */ function emit(type) { var listeners, - object = this, - event = Event(type), - events = object.events, - args = (arguments[0] = event, arguments); + object = this, + event = Event(type), + events = object.events, + args = ((arguments[0] = event), arguments); event.currentTarget || (event.currentTarget = object); event.target || (event.target = object); delete event.result; if (events && (listeners = _.has(events, event.type) && events[event.type])) { - _.each(listeners.slice(), function(listener) { + _.each(listeners.slice(), function (listener) { if ((event.result = listener.apply(object, args)) === false) { event.cancelled = true; } @@ -1195,7 +1245,7 @@ module.exports = (function() { */ function listeners(type) { var object = this, - events = object.events || (object.events = {}); + events = object.events || (object.events = {}); return _.has(events, type) ? events[type] : (events[type] = []); } @@ -1228,12 +1278,12 @@ module.exports = (function() { */ function off(type, listener) { var object = this, - events = object.events; + events = object.events; if (!events) { return object; } - _.each(type ? type.split(' ') : events, function(listeners, type) { + _.each(type ? type.split(' ') : events, function (listeners, type) { var index; if (typeof listeners == 'string') { type = listeners; @@ -1270,13 +1320,10 @@ module.exports = (function() { */ function on(type, listener) { var object = this, - events = object.events || (object.events = {}); + events = object.events || (object.events = {}); - _.each(type.split(' '), function(type) { - (_.has(events, type) - ? events[type] - : (events[type] = []) - ).push(listener); + _.each(type.split(' '), function (type) { + (_.has(events, type) ? events[type] : (events[type] = [])).push(listener); }); return object; } @@ -1291,8 +1338,8 @@ module.exports = (function() { */ function abort() { var event, - bench = this, - resetting = calledBy.reset; + bench = this, + resetting = calledBy.reset; if (bench.running) { event = Event('abort'); @@ -1330,13 +1377,13 @@ module.exports = (function() { */ function clone(options) { var bench = this, - result = new bench.constructor(_.assign({}, bench, options)); + result = new bench.constructor(_.assign({}, bench, options)); // Correct the `options` object. result.options = _.assign({}, cloneDeep(bench.options), cloneDeep(options)); // Copy own custom properties. - _.forOwn(bench, function(value, key) { + _.forOwn(bench, function (value, key) { if (!_.has(result, key)) { result[key] = cloneDeep(value); } @@ -1360,31 +1407,39 @@ module.exports = (function() { return 0; } var critical, - zStat, - sample1 = bench.stats.sample, - sample2 = other.stats.sample, - size1 = sample1.length, - size2 = sample2.length, - maxSize = max(size1, size2), - minSize = min(size1, size2), - u1 = getU(sample1, sample2), - u2 = getU(sample2, sample1), - u = min(u1, u2); + zStat, + sample1 = bench.stats.sample, + sample2 = other.stats.sample, + size1 = sample1.length, + size2 = sample2.length, + maxSize = max(size1, size2), + minSize = min(size1, size2), + u1 = getU(sample1, sample2), + u2 = getU(sample2, sample1), + u = min(u1, u2); function getScore(xA, sampleB) { - return _.reduce(sampleB, function(total, xB) { - return total + (xB > xA ? 0 : xB < xA ? 1 : 0.5); - }, 0); + return _.reduce( + sampleB, + function (total, xB) { + return total + (xB > xA ? 0 : xB < xA ? 1 : 0.5); + }, + 0 + ); } function getU(sampleA, sampleB) { - return _.reduce(sampleA, function(total, xA) { - return total + getScore(xA, sampleB); - }, 0); + return _.reduce( + sampleA, + function (total, xA) { + return total + getScore(xA, sampleB); + }, + 0 + ); } function getZ(u) { - return (u - ((size1 * size2) / 2)) / sqrt((size1 * size2 * (size1 + size2 + 1)) / 12); + return (u - (size1 * size2) / 2) / sqrt((size1 * size2 * (size1 + size2 + 1)) / 12); } // Reject the null hypothesis the two samples come from the // same population (i.e. have the same median) if... @@ -1415,22 +1470,22 @@ module.exports = (function() { return bench; } var event, - index = 0, - changes = [], - queue = []; + index = 0, + changes = [], + queue = []; // A non-recursive solution to check if properties have changed. // For more information see http://www.jslab.dk/articles/non.recursive.preorder.traversal.part4. var data = { 'destination': bench, - 'source': _.assign({}, cloneDeep(bench.constructor.prototype), cloneDeep(bench.options)) + 'source': _.assign({}, cloneDeep(bench.constructor.prototype), cloneDeep(bench.options)), }; do { - _.forOwn(data.source, function(value, key) { + _.forOwn(data.source, function (value, key) { var changed, - destination = data.destination, - currValue = destination[key]; + destination = data.destination, + currValue = destination[key]; // Skip pseudo private properties like `_timerId` which could be a // Java object in environments like RingoJS. @@ -1464,12 +1519,11 @@ module.exports = (function() { changes.push({ 'destination': destination, 'key': key, 'value': value }); } }); - } - while ((data = queue[index++])); + } while ((data = queue[index++])); // If changed emit the `reset` event and if it isn't cancelled reset the benchmark. - if (changes.length && (bench.emit(event = Event('reset')), !event.cancelled)) { - _.each(changes, function(data) { + if (changes.length && (bench.emit((event = Event('reset'))), !event.cancelled)) { + _.each(changes, function (data) { data.destination[data.key] = data.value; }); } @@ -1485,13 +1539,13 @@ module.exports = (function() { */ function toStringBench() { var bench = this, - error = bench.error, - hz = bench.hz, - id = bench.id, - stats = bench.stats, - size = stats.sample.length, - pm = '\xb1', - result = bench.name || (_.isNaN(id) ? id : ''); + error = bench.error, + hz = bench.hz, + id = bench.id, + stats = bench.stats, + size = stats.sample.length, + pm = '\xb1', + result = bench.name || (_.isNaN(id) ? id : ''); if (error) { var errorStr; @@ -1504,10 +1558,18 @@ module.exports = (function() { errorStr = join(_.assign({ 'name': error.name, 'message': error.message }, error)); } result += ': ' + errorStr; - } - else { - result += ' x ' + formatNumber(hz.toFixed(hz < 100 ? 2 : 0)) + ' ops/sec ' + pm + - stats.rme.toFixed(2) + '% (' + size + ' run' + (size == 1 ? '' : 's') + ' sampled)'; + } else { + result += + ' x ' + + formatNumber(hz.toFixed(hz < 100 ? 2 : 0)) + + ' ops/sec ' + + pm + + stats.rme.toFixed(2) + + '% (' + + size + + ' run' + + (size == 1 ? '' : 's') + + ' sampled)'; } return result; } @@ -1523,11 +1585,11 @@ module.exports = (function() { */ function clock() { var options = Benchmark.options, - templateData = {}, - timers = [{ 'ns': timer.ns, 'res': max(0.0015, getRes('ms')), 'unit': 'ms' }]; + templateData = {}, + timers = [{ 'ns': timer.ns, 'res': max(0.0015, getRes('ms')), 'unit': 'ms' }]; // Lazy define for hi-res timers. - clock = function(clone) { + clock = function (clone) { var deferred; if (clone instanceof Deferred) { @@ -1535,12 +1597,12 @@ module.exports = (function() { clone = deferred.benchmark; } var bench = clone._original, - stringable = isStringable(bench.fn), - count = bench.count = clone.count, - decompilable = stringable || (support.decompilation && (clone.setup !== _.noop || clone.teardown !== _.noop)), - id = bench.id, - name = bench.name || (typeof id == 'number' ? '' : id), - result = 0; + stringable = isStringable(bench.fn), + count = (bench.count = clone.count), + decompilable = stringable || (support.decompilation && (clone.setup !== _.noop || clone.teardown !== _.noop)), + id = bench.id, + name = bench.name || (typeof id == 'number' ? '' : id), + result = 0; // Init `minTime` if needed. clone.minTime = bench.minTime || (bench.minTime = bench.options.minTime = options.minTime); @@ -1550,50 +1612,47 @@ module.exports = (function() { // to avoid potential engine optimizations enabled over the life of the test. var funcBody = deferred ? 'var d#=this,${fnArg}=d#,m#=d#.benchmark._original,f#=m#.fn,su#=m#.setup,td#=m#.teardown;' + - // When `deferred.cycles` is `0` then... - 'if(!d#.cycles){' + - // set `deferred.fn`, - 'd#.fn=function(){var ${fnArg}=d#;if(typeof f#=="function"){try{${fn}\n}catch(e#){f#(d#)}}else{${fn}\n}};' + - // set `deferred.teardown`, - 'd#.teardown=function(){d#.cycles=0;if(typeof td#=="function"){try{${teardown}\n}catch(e#){td#()}}else{${teardown}\n}};' + - // execute the benchmark's `setup`, - 'if(typeof su#=="function"){try{${setup}\n}catch(e#){su#()}}else{${setup}\n};' + - // start timer, - 't#.start(d#);' + - // and then execute `deferred.fn` and return a dummy object. - '}d#.fn();return{uid:"${uid}"}' - + // When `deferred.cycles` is `0` then... + 'if(!d#.cycles){' + + // set `deferred.fn`, + 'd#.fn=function(){var ${fnArg}=d#;if(typeof f#=="function"){try{${fn}\n}catch(e#){f#(d#)}}else{${fn}\n}};' + + // set `deferred.teardown`, + 'd#.teardown=function(){d#.cycles=0;if(typeof td#=="function"){try{${teardown}\n}catch(e#){td#()}}else{${teardown}\n}};' + + // execute the benchmark's `setup`, + 'if(typeof su#=="function"){try{${setup}\n}catch(e#){su#()}}else{${setup}\n};' + + // start timer, + 't#.start(d#);' + + // and then execute `deferred.fn` and return a dummy object. + '}d#.fn();return{uid:"${uid}"}' : 'var r#,s#,m#=this,f#=m#.fn,i#=m#.count,n#=t#.ns;${setup}\n${begin};' + - 'while(i#--){${fn}\n}${end};${teardown}\nreturn{elapsed:r#,uid:"${uid}"}'; + 'while(i#--){${fn}\n}${end};${teardown}\nreturn{elapsed:r#,uid:"${uid}"}'; - var compiled = bench.compiled = clone.compiled = createCompiled(bench, decompilable, deferred, funcBody), - isEmpty = !(templateData.fn || stringable); + var compiled = (bench.compiled = clone.compiled = createCompiled(bench, decompilable, deferred, funcBody)), + isEmpty = !(templateData.fn || stringable); try { if (isEmpty) { // Firefox may remove dead code from `Function#toString` results. // For more information see http://bugzil.la/536085. throw new Error('The test "' + name + '" is empty. This may be the result of dead code removal.'); - } - else if (!deferred) { + } else if (!deferred) { // Pretest to determine if compiled code exits early, usually by a // rogue `return` statement, by checking for a return object with the uid. bench.count = 1; compiled = decompilable && (compiled.call(bench, context, timer) || {}).uid == templateData.uid && compiled; bench.count = count; } - } catch(e) { + } catch (e) { compiled = null; clone.error = e || new Error(String(e)); bench.count = count; } // Fallback when a test exits early or errors during pretest. if (!compiled && !deferred && !isEmpty) { - funcBody = ( - stringable || (decompilable && !clone.error) + funcBody = + (stringable || (decompilable && !clone.error) ? 'function f#(){${fn}\n}var r#,s#,m#=this,i#=m#.count' - : 'var r#,s#,m#=this,f#=m#.fn,i#=m#.count' - ) + + : 'var r#,s#,m#=this,f#=m#.fn,i#=m#.count') + ',n#=t#.ns;${setup}\n${begin};m#.f#=f#;while(i#--){m#.f#()}${end};' + 'delete m#.f#;${teardown}\nreturn{elapsed:r#}'; @@ -1605,8 +1664,7 @@ module.exports = (function() { compiled.call(bench, context, timer); bench.count = count; delete clone.error; - } - catch(e) { + } catch (e) { bench.count = count; if (!clone.error) { clone.error = e || new Error(String(e)); @@ -1628,7 +1686,7 @@ module.exports = (function() { */ function createCompiled(bench, decompilable, deferred, body) { var fn = bench.fn, - fnArg = deferred ? getFirstArgument(fn) || 'deferred' : ''; + fnArg = deferred ? getFirstArgument(fn) || 'deferred' : ''; templateData.uid = uid + uidCounter++; @@ -1636,39 +1694,36 @@ module.exports = (function() { 'setup': decompilable ? getSource(bench.setup) : interpolate('m#.setup()'), 'fn': decompilable ? getSource(fn) : interpolate('m#.fn(' + fnArg + ')'), 'fnArg': fnArg, - 'teardown': decompilable ? getSource(bench.teardown) : interpolate('m#.teardown()') + 'teardown': decompilable ? getSource(bench.teardown) : interpolate('m#.teardown()'), }); // Use API of chosen timer. if (timer.unit == 'ns') { _.assign(templateData, { 'begin': interpolate('s#=n#()'), - 'end': interpolate('r#=n#(s#);r#=r#[0]+(r#[1]/1e9)') + 'end': interpolate('r#=n#(s#);r#=r#[0]+(r#[1]/1e9)'), }); - } - else if (timer.unit == 'us') { + } else if (timer.unit == 'us') { if (timer.ns.stop) { _.assign(templateData, { 'begin': interpolate('s#=n#.start()'), - 'end': interpolate('r#=n#.microseconds()/1e6') + 'end': interpolate('r#=n#.microseconds()/1e6'), }); } else { _.assign(templateData, { 'begin': interpolate('s#=n#()'), - 'end': interpolate('r#=(n#()-s#)/1e6') + 'end': interpolate('r#=(n#()-s#)/1e6'), }); } - } - else if (timer.ns.now) { + } else if (timer.ns.now) { _.assign(templateData, { 'begin': interpolate('s#=n#.now()'), - 'end': interpolate('r#=(n#.now()-s#)/1e3') + 'end': interpolate('r#=(n#.now()-s#)/1e3'), }); - } - else { + } else { _.assign(templateData, { 'begin': interpolate('s#=new n#().getTime()'), - 'end': interpolate('r#=(new n#().getTime()-s#)/1e3') + 'end': interpolate('r#=(new n#().getTime()-s#)/1e3'), }); } // Define `timer` methods. @@ -1686,7 +1741,7 @@ module.exports = (function() { return createFunction( interpolate('window,t#'), 'var global = window, clearTimeout = global.clearTimeout, setTimeout = global.setTimeout;\n' + - interpolate(body) + interpolate(body) ); } @@ -1695,11 +1750,11 @@ module.exports = (function() { */ function getRes(unit) { var measured, - begin, - count = 30, - divisor = 1e3, - ns = timer.ns, - sample = []; + begin, + count = 30, + divisor = 1e3, + ns = timer.ns, + sample = []; // Get average smallest measurable time. while (count--) { @@ -1712,18 +1767,15 @@ module.exports = (function() { begin = ns(); while (!(measured = ns() - begin)) {} } - } - else if (unit == 'ns') { + } else if (unit == 'ns') { divisor = 1e9; - begin = (begin = ns())[0] + (begin[1] / divisor); - while (!(measured = ((measured = ns())[0] + (measured[1] / divisor)) - begin)) {} + begin = (begin = ns())[0] + begin[1] / divisor; + while (!(measured = (measured = ns())[0] + measured[1] / divisor - begin)) {} divisor = 1; - } - else if (ns.now) { + } else if (ns.now) { begin = ns.now(); while (!(measured = ns.now() - begin)) {} - } - else { + } else { begin = new ns().getTime(); while (!(measured = new ns().getTime() - begin)) {} } @@ -1753,10 +1805,10 @@ module.exports = (function() { // enable benchmarking via the --enable-benchmarking command // line switch in at least Chrome 7 to use chrome.Interval try { - if ((timer.ns = new (context.chrome || context.chromium).Interval)) { + if ((timer.ns = new (context.chrome || context.chromium).Interval())) { timers.push({ 'ns': timer.ns, 'res': getRes('us'), 'unit': 'us' }); } - } catch(e) {} + } catch (e) {} // Detect Node.js's nanosecond resolution timer available in Node.js >= 0.8. if (processObject && typeof (timer.ns = processObject.hrtime) == 'function') { @@ -1788,25 +1840,27 @@ module.exports = (function() { options || (options = {}); var async = options.async, - elapsed = 0, - initCount = bench.initCount, - minSamples = bench.minSamples, - queue = [], - sample = bench.stats.sample; + elapsed = 0, + initCount = bench.initCount, + minSamples = bench.minSamples, + queue = [], + sample = bench.stats.sample; /** * Adds a clone to the queue. */ function enqueue() { - queue.push(bench.clone({ - '_original': bench, - 'events': { - 'abort': [update], - 'cycle': [update], - 'error': [update], - 'start': [update] - } - })); + queue.push( + bench.clone({ + '_original': bench, + 'events': { + 'abort': [update], + 'cycle': [update], + 'error': [update], + 'start': [update], + }, + }) + ); } /** @@ -1814,14 +1868,13 @@ module.exports = (function() { */ function update(event) { var clone = this, - type = event.type; + type = event.type; if (bench.running) { if (type == 'start') { // Note: `clone.minTime` prop is inited in `clock()`. clone.count = bench.initCount; - } - else { + } else { if (type == 'error') { bench.error = clone.error; } @@ -1845,20 +1898,22 @@ module.exports = (function() { */ function evaluate(event) { var critical, - df, - mean, - moe, - rme, - sd, - sem, - variance, - clone = event.target, - done = bench.aborted, - now = _.now(), - size = sample.push(clone.times.period), - maxedOut = size >= minSamples && (elapsed += now - clone.times.timeStamp) / 1e3 > bench.maxTime, - times = bench.times, - varOf = function(sum, x) { return sum + pow(x - mean, 2); }; + df, + mean, + moe, + rme, + sd, + sem, + variance, + clone = event.target, + done = bench.aborted, + now = _.now(), + size = sample.push(clone.times.period), + maxedOut = size >= minSamples && (elapsed += now - clone.times.timeStamp) / 1e3 > bench.maxTime, + times = bench.times, + varOf = function (sum, x) { + return sum + pow(x - mean, 2); + }; // Exit early for aborted or unclockable tests. if (done || clone.hz == Infinity) { @@ -1889,7 +1944,7 @@ module.exports = (function() { 'moe': moe, 'rme': rme, 'sem': sem, - 'variance': variance + 'variance': variance, }); // Abort the cycle loop when the minimum sample size has been collected @@ -1925,7 +1980,9 @@ module.exports = (function() { 'args': { 'async': async }, 'queued': true, 'onCycle': evaluate, - 'onComplete': function() { bench.emit('complete'); } + 'onComplete': function () { + bench.emit('complete'); + }, }); } @@ -1947,15 +2004,15 @@ module.exports = (function() { clone = clone.benchmark; } var clocked, - cycles, - divisor, - event, - minTime, - period, - async = options.async, - bench = clone._original, - count = clone.count, - times = clone.times; + cycles, + divisor, + event, + minTime, + period, + async = options.async, + bench = clone._original, + count = clone.count, + times = clone.times; // Continue, if not aborted between cycles. if (clone.running) { @@ -2015,12 +2072,13 @@ module.exports = (function() { if (deferred) { clone.compiled.call(deferred, context, timer); } else if (async) { - delay(clone, function() { cycle(clone, options); }); + delay(clone, function () { + cycle(clone, options); + }); } else { cycle(clone); } - } - else { + } else { // Fix TraceMonkey bug associated with clock fallbacks. // For more information see http://bugzil.la/509069. if (support.browser) { @@ -2049,7 +2107,7 @@ module.exports = (function() { */ function run(options) { var bench = this, - event = Event('start'); + event = Event('start'); // Set `running` to `false` so `reset()` won't call `abort()`. bench.running = false; @@ -2061,7 +2119,9 @@ module.exports = (function() { bench.emit(event); if (!event.cancelled) { - options = { 'async': ((options = options && options.async) == null ? bench.async : options) && support.timeout }; + options = { + 'async': ((options = options && options.async) == null ? bench.async : options) && support.timeout, + }; // For clones created within `compute()`. if (bench._original) { @@ -2088,7 +2148,6 @@ module.exports = (function() { // making it non-writable in the process, unless it is the first property // assigned by for-in loop of `_.assign()`. _.assign(Benchmark, { - /** * The default options copied by benchmark instances. * @@ -2097,7 +2156,6 @@ module.exports = (function() { * @type Object */ 'options': { - /** * A flag to indicate that benchmark cycles will execute asynchronously * by default. @@ -2219,7 +2277,7 @@ module.exports = (function() { * @memberOf Benchmark.options * @type Function */ - 'onStart': undefined + 'onStart': undefined, }, /** @@ -2230,19 +2288,20 @@ module.exports = (function() { * @memberOf Benchmark * @type Object */ - 'platform': context.platform || require('platform') || ({ - 'description': context.navigator && context.navigator.userAgent || null, - 'layout': null, - 'product': null, - 'name': null, - 'manufacturer': null, - 'os': null, - 'prerelease': null, - 'version': null, - 'toString': function() { - return this.description || ''; - } - }), + 'platform': context.platform || + require('platform') || { + 'description': (context.navigator && context.navigator.userAgent) || null, + 'layout': null, + 'product': null, + 'name': null, + 'manufacturer': null, + 'os': null, + 'prerelease': null, + 'version': null, + 'toString': function () { + return this.description || ''; + }, + }, /** * The semantic version number. @@ -2251,7 +2310,7 @@ module.exports = (function() { * @memberOf Benchmark * @type string */ - 'version': '2.1.2' + 'version': '2.1.2', }); _.assign(Benchmark, { @@ -2260,18 +2319,17 @@ module.exports = (function() { 'invoke': invoke, 'join': join, 'runInContext': runInContext, - 'support': support + 'support': support, }); // Add lodash methods to Benchmark. - _.each(['each', 'forEach', 'forOwn', 'has', 'indexOf', 'map', 'reduce'], function(methodName) { + _.each(['each', 'forEach', 'forOwn', 'has', 'indexOf', 'map', 'reduce'], function (methodName) { Benchmark[methodName] = _[methodName]; }); /*------------------------------------------------------------------------*/ _.assign(Benchmark.prototype, { - /** * The number of times a test was executed. * @@ -2414,7 +2472,6 @@ module.exports = (function() { * @type Object */ 'stats': { - /** * The margin of error. * @@ -2469,7 +2526,7 @@ module.exports = (function() { * @memberOf Benchmark#stats * @type number */ - 'variance': 0 + 'variance': 0, }, /** @@ -2479,7 +2536,6 @@ module.exports = (function() { * @type Object */ 'times': { - /** * The time taken to complete the last cycle (secs). * @@ -2510,8 +2566,8 @@ module.exports = (function() { * @memberOf Benchmark#times * @type number */ - 'timeStamp': 0 - } + 'timeStamp': 0, + }, }); _.assign(Benchmark.prototype, { @@ -2524,13 +2580,12 @@ module.exports = (function() { 'on': on, 'reset': reset, 'run': run, - 'toString': toStringBench + 'toString': toStringBench, }); /*------------------------------------------------------------------------*/ _.assign(Deferred.prototype, { - /** * The deferred benchmark instance. * @@ -2561,17 +2616,16 @@ module.exports = (function() { * @memberOf Benchmark.Deferred * @type number */ - 'timeStamp': 0 + 'timeStamp': 0, }); _.assign(Deferred.prototype, { - 'resolve': resolve + 'resolve': resolve, }); /*------------------------------------------------------------------------*/ _.assign(Event.prototype, { - /** * A flag to indicate if the emitters listener iteration is aborted. * @@ -2626,7 +2680,7 @@ module.exports = (function() { * @memberOf Benchmark.Event * @type string */ - 'type': '' + 'type': '', }); /*------------------------------------------------------------------------*/ @@ -2639,20 +2693,18 @@ module.exports = (function() { * @type Object */ Suite.options = { - /** * The name of the suite. * * @memberOf Benchmark.Suite.options * @type string */ - 'name': undefined + 'name': undefined, }; /*------------------------------------------------------------------------*/ _.assign(Suite.prototype, { - /** * The number of benchmarks in the suite. * @@ -2675,7 +2727,7 @@ module.exports = (function() { * @memberOf Benchmark.Suite * @type boolean */ - 'running': false + 'running': false, }); _.assign(Suite.prototype, { @@ -2697,7 +2749,7 @@ module.exports = (function() { 'slice': slice, 'sort': arrayRef.sort, 'splice': arrayRef.splice, - 'unshift': unshift + 'unshift': unshift, }); /*------------------------------------------------------------------------*/ @@ -2706,15 +2758,15 @@ module.exports = (function() { _.assign(Benchmark, { 'Deferred': Deferred, 'Event': Event, - 'Suite': Suite + 'Suite': Suite, }); /*------------------------------------------------------------------------*/ // Add lodash methods as Suite methods. - _.each(['each', 'forEach', 'indexOf', 'map', 'reduce'], function(methodName) { + _.each(['each', 'forEach', 'indexOf', 'map', 'reduce'], function (methodName) { var func = _[methodName]; - Suite.prototype[methodName] = function() { + Suite.prototype[methodName] = function () { var args = [this]; push.apply(args, arguments); return func.apply(_, args); @@ -2723,12 +2775,12 @@ module.exports = (function() { // Avoid array-like object bugs with `Array#shift` and `Array#splice` // in Firefox < 10 and IE < 9. - _.each(['pop', 'shift', 'splice'], function(methodName) { + _.each(['pop', 'shift', 'splice'], function (methodName) { var func = arrayRef[methodName]; - Suite.prototype[methodName] = function() { + Suite.prototype[methodName] = function () { var value = this, - result = func.apply(value, arguments); + result = func.apply(value, arguments); if (value.length === 0) { delete value[0]; @@ -2739,7 +2791,7 @@ module.exports = (function() { // Avoid buggy `Array#unshift` in IE < 8 which doesn't return the new // length of the array. - Suite.prototype.unshift = function() { + Suite.prototype.unshift = function () { var value = this; unshift.apply(value, arguments); return value.length; @@ -2755,5 +2807,4 @@ module.exports = (function() { window.Benchmark = Benchmark; return Benchmark; - -}.call(this)); +}.call(this); diff --git a/tgui/packages/tgui-bench/tests/Button.test.tsx b/tgui/packages/tgui-bench/tests/Button.test.tsx index e3472cbbbf..67e156e366 100644 --- a/tgui/packages/tgui-bench/tests/Button.test.tsx +++ b/tgui/packages/tgui-bench/tests/Button.test.tsx @@ -7,40 +7,24 @@ const render = createRenderer(); const handleClick = () => undefined; export const SingleButton = () => { - const node = ( - - ); + const node = ; render(node); }; export const SingleButtonWithCallback = () => { - const node = ( - - ); + const node = ; render(node); }; export const SingleButtonWithLinkEvent = () => { - const node = ( - - ); + const node = ; render(node); }; export const ListOfButtons = () => { const nodes: JSX.Element[] = []; for (let i = 0; i < 100; i++) { - const node = ( - - ); + const node = ; nodes.push(node); } render(

    {nodes}
    ); diff --git a/tgui/packages/tgui-bench/tests/DisposalBin.test.tsx b/tgui/packages/tgui-bench/tests/DisposalBin.test.tsx index 99367d2016..a7cbe55dd6 100644 --- a/tgui/packages/tgui-bench/tests/DisposalBin.test.tsx +++ b/tgui/packages/tgui-bench/tests/DisposalBin.test.tsx @@ -6,9 +6,11 @@ import { configureStore, StoreProvider } from 'tgui/store'; const store = configureStore({ sideEffets: false }); const renderUi = createRenderer((dataJson: string) => { - store.dispatch(backendUpdate({ - data: Byond.parseJson(dataJson), - })); + store.dispatch( + backendUpdate({ + data: Byond.parseJson(dataJson), + }) + ); return ( diff --git a/tgui/packages/tgui-bench/tests/Flex.test.tsx b/tgui/packages/tgui-bench/tests/Flex.test.tsx index e81ebc6f61..66c039a190 100644 --- a/tgui/packages/tgui-bench/tests/Flex.test.tsx +++ b/tgui/packages/tgui-bench/tests/Flex.test.tsx @@ -6,9 +6,7 @@ const render = createRenderer(); export const Default = () => { const node = ( - - Text {Math.random()} - + Text {Math.random()} Text {Math.random()} diff --git a/tgui/packages/tgui-bench/tests/Stack.test.tsx b/tgui/packages/tgui-bench/tests/Stack.test.tsx index 952dba2029..ce7f5599e7 100644 --- a/tgui/packages/tgui-bench/tests/Stack.test.tsx +++ b/tgui/packages/tgui-bench/tests/Stack.test.tsx @@ -6,9 +6,7 @@ const render = createRenderer(); export const Default = () => { const node = ( - - Text {Math.random()} - + Text {Math.random()} Text {Math.random()} diff --git a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx b/tgui/packages/tgui-bench/tests/Tooltip.test.tsx index b953fc911d..ea43a61f0b 100644 --- a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx +++ b/tgui/packages/tgui-bench/tests/Tooltip.test.tsx @@ -1,5 +1,5 @@ -import { Box, Tooltip } from "tgui/components"; -import { createRenderer } from "tgui/renderer"; +import { Box, Tooltip } from 'tgui/components'; +import { createRenderer } from 'tgui/renderer'; const render = createRenderer(); diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js index 3d4149cf25..0081d91a7e 100644 --- a/tgui/packages/tgui-dev-server/dreamseeker.js +++ b/tgui/packages/tgui-dev-server/dreamseeker.js @@ -25,8 +25,7 @@ export class DreamSeeker { topic(params = {}) { const query = Object.keys(params) - .map(key => encodeURIComponent(key) - + '=' + encodeURIComponent(params[key])) + .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(params[key])) .join('&'); return this.client.get('/dummy?' + query); } @@ -36,7 +35,7 @@ export class DreamSeeker { * @param {number[]} pids * @returns {DreamSeeker[]} */ -DreamSeeker.getInstancesByPids = async pids => { +DreamSeeker.getInstancesByPids = async (pids) => { if (process.platform !== 'win32') { return []; } @@ -46,8 +45,7 @@ DreamSeeker.getInstancesByPids = async pids => { const instance = instanceByPid.get(pid); if (instance) { instances.push(instance); - } - else { + } else { pidsToResolve.push(pid); } } @@ -83,12 +81,10 @@ DreamSeeker.getInstancesByPids = async pids => { instances.push(instance); instanceByPid.set(pid, instance); } - } - catch (err) { + } catch (err) { if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER') { logger.error(err.message, err.code); - } - else { + } else { logger.error(err); } return []; @@ -97,4 +93,4 @@ DreamSeeker.getInstancesByPids = async pids => { return instances; }; -const plural = (word, n) => n !== 1 ? word + 's' : word; +const plural = (word, n) => (n !== 1 ? word + 's' : word); diff --git a/tgui/packages/tgui-dev-server/link/client.cjs b/tgui/packages/tgui-dev-server/link/client.cjs index fe75314acd..47cd6398b0 100644 --- a/tgui/packages/tgui-dev-server/link/client.cjs +++ b/tgui/packages/tgui-dev-server/link/client.cjs @@ -23,7 +23,7 @@ const ensureConnection = () => { socket.send(msg); } }; - socket.onmessage = event => { + socket.onmessage = (event) => { const msg = JSON.parse(event.data); for (let subscriber of subscribers) { subscriber(msg); @@ -37,14 +37,14 @@ if (process.env.NODE_ENV !== 'production') { window.onunload = () => socket && socket.close(); } -const subscribe = fn => subscribers.push(fn); +const subscribe = (fn) => subscribers.push(fn); /** * A json serializer which handles circular references and other junk. */ -const serializeObject = obj => { +const serializeObject = (obj) => { let refs = []; - const primitiveReviver = value => { + const primitiveReviver = (value) => { if (typeof value === 'number' && !Number.isFinite(value)) { return { __number__: String(value), @@ -68,9 +68,7 @@ const serializeObject = obj => { } refs.push(value); // Error object - const isError = value instanceof Error || ( - value.code && value.message && value.message.includes('Error') - ); + const isError = value instanceof Error || (value.code && value.message && value.message.includes('Error')); if (isError) { return { __error__: true, @@ -91,7 +89,7 @@ const serializeObject = obj => { return json; }; -const sendMessage = msg => { +const sendMessage = (msg) => { if (process.env.NODE_ENV !== 'production') { const json = serializeObject(msg); // Send message using WebSocket @@ -99,8 +97,7 @@ const sendMessage = msg => { ensureConnection(); if (socket.readyState === WebSocket.OPEN) { socket.send(json); - } - else { + } else { // Keep only 100 latest messages in the queue if (queue.length > 100) { queue.shift(); @@ -130,19 +127,16 @@ const sendLogEntry = (level, ns, ...args) => { args, }, }); - } - catch (err) {} + } catch (err) {} } }; const setupHotReloading = () => { - if (process.env.NODE_ENV !== 'production' - && process.env.WEBPACK_HMR_ENABLED - && window.WebSocket) { + if (process.env.NODE_ENV !== 'production' && process.env.WEBPACK_HMR_ENABLED && window.WebSocket) { if (module.hot) { ensureConnection(); sendLogEntry(0, null, 'setting up hot reloading'); - subscribe(msg => { + subscribe((msg) => { const { type } = msg; sendLogEntry(0, null, 'received', type); if (type === 'hotUpdate') { @@ -157,10 +151,10 @@ const setupHotReloading = () => { ignoreDeclined: true, ignoreErrored: true, }) - .then(modules => { + .then((modules) => { sendLogEntry(0, null, 'outdated modules', modules); }) - .catch(err => { + .catch((err) => { sendLogEntry(0, null, 'reload error', err); }); } diff --git a/tgui/packages/tgui-dev-server/link/retrace.js b/tgui/packages/tgui-dev-server/link/retrace.js index c10ba9cb17..60819861b9 100644 --- a/tgui/packages/tgui-dev-server/link/retrace.js +++ b/tgui/packages/tgui-dev-server/link/retrace.js @@ -18,7 +18,7 @@ const logger = createLogger('retrace'); const { SourceMapConsumer } = SourceMap; const sourceMaps = []; -export const loadSourceMaps = async bundleDir => { +export const loadSourceMaps = async (bundleDir) => { // Destroy and garbage collect consumers while (sourceMaps.length !== 0) { const { consumer } = sourceMaps.shift(); @@ -29,30 +29,28 @@ export const loadSourceMaps = async bundleDir => { for (let path of paths) { try { const file = basename(path).replace('.map', ''); - const consumer = await new SourceMapConsumer( - JSON.parse(fs.readFileSync(path, 'utf8'))); + const consumer = await new SourceMapConsumer(JSON.parse(fs.readFileSync(path, 'utf8'))); sourceMaps.push({ file, consumer }); - } - catch (err) { + } catch (err) { logger.error(err); } } logger.log(`loaded ${sourceMaps.length} source maps`); }; -export const retrace = stack => { +export const retrace = (stack) => { if (typeof stack !== 'string') { logger.log('ERROR: Stack is not a string!', stack); return stack; } const header = stack.split(/\n\s.*at/)[0]; const mappedStack = parseStackTrace(stack) - .map(frame => { + .map((frame) => { if (!frame.file) { return frame; } // Find the correct source map - const sourceMap = sourceMaps.find(sourceMap => { + const sourceMap = sourceMaps.find((sourceMap) => { return frame.file.includes(sourceMap.file); }); if (!sourceMap) { @@ -72,15 +70,13 @@ export const retrace = stack => { column: mappedFrame.column, }; }) - .map(frame => { + .map((frame) => { // Stringify the frame const { file, methodName, lineNumber } = frame; if (!file) { return ` at ${methodName}`; } - const compactPath = file - .replace(/^webpack:\/\/\/?/, './') - .replace(/.*node_modules\//, ''); + const compactPath = file.replace(/^webpack:\/\/\/?/, './').replace(/.*node_modules\//, ''); return ` at ${methodName} (${compactPath}:${lineNumber})`; }) .join('\n'); diff --git a/tgui/packages/tgui-dev-server/link/server.js b/tgui/packages/tgui-dev-server/link/server.js index 87a8a5911b..70109d162e 100644 --- a/tgui/packages/tgui-dev-server/link/server.js +++ b/tgui/packages/tgui-dev-server/link/server.js @@ -32,9 +32,9 @@ class LinkServer { setupWebSocketLink() { const port = 3000; this.wss = new WebSocket.Server({ port }); - this.wss.on('connection', ws => { + this.wss.on('connection', (ws) => { logger.log('client connected'); - ws.on('message', json => { + ws.on('message', (json) => { const msg = deserializeObject(json); this.handleLinkMessage(ws, msg); }); @@ -51,7 +51,7 @@ class LinkServer { this.httpServer = http.createServer((req, res) => { if (req.method === 'POST') { let body = ''; - req.on('data', chunk => { + req.on('data', (chunk) => { body += chunk.toString(); }); req.on('end', () => { @@ -76,16 +76,19 @@ class LinkServer { if (level <= 0 && !DEBUG) { return; } - directLog(ns, ...args.map(arg => { - if (typeof arg === 'object') { - return inspect(arg, { - depth: Infinity, - colors: true, - compact: 8, - }); - } - return arg; - })); + directLog( + ns, + ...args.map((arg) => { + if (typeof arg === 'object') { + return inspect(arg, { + depth: Infinity, + colors: true, + compact: 8, + }); + } + return arg; + }) + ); return; } if (type === 'relay') { @@ -117,7 +120,7 @@ class LinkServer { } } -const deserializeObject = str => { +const deserializeObject = (str) => { return JSON.parse(str, (key, value) => { if (typeof value === 'object' && value !== null) { if (value.__undefined__) { diff --git a/tgui/packages/tgui-dev-server/logging.js b/tgui/packages/tgui-dev-server/logging.js index 0dc222ae3d..ff8aba8776 100644 --- a/tgui/packages/tgui-dev-server/logging.js +++ b/tgui/packages/tgui-dev-server/logging.js @@ -11,8 +11,7 @@ const isNode = process && process.release && process.release.name === 'node'; let isChrome = false; try { isChrome = window.navigator.userAgent.toLowerCase().includes('chrome'); -} -catch {} +} catch {} // Timestamping function const getTimestamp = () => { @@ -32,9 +31,7 @@ const getPrefix = (() => { bright: '\x1b[37;1m', reset: '\x1b[0m', }; - return ns => [ - `${ESC.dimmed}${getTimestamp()} ${ESC.bright}${ns}${ESC.reset}`, - ]; + return (ns) => [`${ESC.dimmed}${getTimestamp()} ${ESC.bright}${ns}${ESC.reset}`]; } if (isChrome) { // Styles @@ -42,21 +39,15 @@ const getPrefix = (() => { dimmed: 'color: #888', bright: 'font-weight: bold', }; - return ns => [ - `%c${getTimestamp()}%c ${ns}`, - styles.dimmed, - styles.bright, - ]; + return (ns) => [`%c${getTimestamp()}%c ${ns}`, styles.dimmed, styles.bright]; } - return ns => [ - `${getTimestamp()} ${ns}`, - ]; + return (ns) => [`${getTimestamp()} ${ns}`]; })(); /** * Creates a logger object. */ -export const createLogger = ns => ({ +export const createLogger = (ns) => ({ log: (...args) => console.log(...getPrefix(ns), ...args), trace: (...args) => console.trace(...getPrefix(ns), ...args), debug: (...args) => console.debug(...getPrefix(ns), ...args), @@ -68,5 +59,4 @@ export const createLogger = ns => ({ /** * Explicitly log with chosen namespace. */ -export const directLog = (ns, ...args) => - console.log(...getPrefix(ns), ...args); +export const directLog = (ns, ...args) => console.log(...getPrefix(ns), ...args); diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.js index 5722cee644..4e3c8fc0ec 100644 --- a/tgui/packages/tgui-dev-server/reloader.js +++ b/tgui/packages/tgui-dev-server/reloader.js @@ -50,14 +50,9 @@ export const findCacheRoot = async () => { // Query the Windows Registry if (process.platform === 'win32') { logger.log('querying windows registry'); - let userpath = await regQuery( - 'HKCU\\Software\\Dantom\\BYOND', - 'userpath'); + let userpath = await regQuery('HKCU\\Software\\Dantom\\BYOND', 'userpath'); if (userpath) { - cacheRoot = userpath - .replace(/\\$/, '') - .replace(/\\/g, '/') - + '/cache'; + cacheRoot = userpath.replace(/\\$/, '').replace(/\\/g, '/') + '/cache'; onCacheRootFound(cacheRoot); return cacheRoot; } @@ -65,13 +60,13 @@ export const findCacheRoot = async () => { logger.log('found no cache directories'); }; -const onCacheRootFound = cacheRoot => { +const onCacheRootFound = (cacheRoot) => { logger.log(`found cache at '${cacheRoot}'`); // Plant a dummy fs.closeSync(fs.openSync(cacheRoot + '/dummy', 'w')); }; -export const reloadByondCache = async bundleDir => { +export const reloadByondCache = async (bundleDir) => { const cacheRoot = await findCacheRoot(); if (!cacheRoot) { return; @@ -83,9 +78,7 @@ export const reloadByondCache = async bundleDir => { return; } // Get dreamseeker instances - const pids = cacheDirs.map(cacheDir => ( - parseInt(cacheDir.split('/cache/tmp').pop(), 10) - )); + const pids = cacheDirs.map((cacheDir) => parseInt(cacheDir.split('/cache/tmp').pop(), 10)); const dssPromise = DreamSeeker.getInstancesByPids(pids); // Copy assets const assets = await resolveGlob(bundleDir, './*.+(bundle|chunk|hot-update).*'); @@ -102,8 +95,7 @@ export const reloadByondCache = async bundleDir => { fs.writeFileSync(destination, fs.readFileSync(asset)); } logger.log(`copied ${assets.length} files to '${cacheDir}'`); - } - catch (err) { + } catch (err) { logger.error(`failed copying to '${cacheDir}'`); logger.error(err); } diff --git a/tgui/packages/tgui-dev-server/util.js b/tgui/packages/tgui-dev-server/util.js index 0fc255ed67..9d07b96c71 100644 --- a/tgui/packages/tgui-dev-server/util.js +++ b/tgui/packages/tgui-dev-server/util.js @@ -25,8 +25,7 @@ export const resolveGlob = (...sections) => { try { fs.statSync(path); safePaths.push(path); - } - catch {} + } catch {} } return safePaths; }; diff --git a/tgui/packages/tgui-dev-server/webpack.js b/tgui/packages/tgui-dev-server/webpack.js index 8cba68afcb..139610b79c 100644 --- a/tgui/packages/tgui-dev-server/webpack.js +++ b/tgui/packages/tgui-dev-server/webpack.js @@ -18,7 +18,7 @@ const logger = createLogger('webpack'); * @param {any} config * @return {WebpackCompiler} */ -export const createCompiler = async options => { +export const createCompiler = async (options) => { const compiler = new WebpackCompiler(); await compiler.setup(options); return compiler; @@ -57,7 +57,7 @@ class WebpackCompiler { logger.log('compiling'); }); // Start reloading when it's finished - compiler.hooks.done.tap('tgui-dev-server', async stats => { + compiler.hooks.done.tap('tgui-dev-server', async (stats) => { // Load source maps await loadSourceMaps(this.bundleDir); // Reload cache @@ -77,7 +77,7 @@ class WebpackCompiler { stats .toString(this.config.devServer.stats) .split('\n') - .forEach(line => logger.log(line)); + .forEach((line) => logger.log(line)); }); } } diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.js index 669e2aad55..b61fddc1a2 100644 --- a/tgui/packages/tgui-dev-server/winreg.js +++ b/tgui/packages/tgui-dev-server/winreg.js @@ -30,17 +30,14 @@ export const regQuery = async (path, key) => { logger.error('could not find the end of the line'); return null; } - const indexOfValue = stdout.indexOf( - ' ', - indexOfKey + keyPattern.length); + const indexOfValue = stdout.indexOf(' ', indexOfKey + keyPattern.length); if (indexOfValue === -1) { logger.error('could not find the start of the key value'); return null; } const value = stdout.substring(indexOfValue + 4, indexOfEol); return value; - } - catch (err) { + } catch (err) { logger.error(err); return null; } diff --git a/tgui/packages/tgui-polyfill/00-html5shiv.js b/tgui/packages/tgui-polyfill/00-html5shiv.js index c2f2060a1d..fcde92e6f7 100644 --- a/tgui/packages/tgui-polyfill/00-html5shiv.js +++ b/tgui/packages/tgui-polyfill/00-html5shiv.js @@ -5,8 +5,8 @@ */ /* eslint-disable */ -(function(window, document) { -/*jshint evil:true */ +(function (window, document) { + /*jshint evil:true */ /** version */ var version = '3.7.3'; @@ -17,7 +17,8 @@ var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; /** Not all elements can be cloned in IE **/ - var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; + var saveClones = + /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; /** Detect whether the browser supports default html5 styles */ var supportsHtml5Styles; @@ -34,30 +35,31 @@ /** Detect whether the browser supports unknown elements */ var supportsUnknownElements; - (function() { + (function () { try { - var a = document.createElement('a'); - a.innerHTML = ''; - //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles - supportsHtml5Styles = ('hidden' in a); + var a = document.createElement('a'); + a.innerHTML = ''; + //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles + supportsHtml5Styles = 'hidden' in a; - supportsUnknownElements = a.childNodes.length == 1 || (function() { + supportsUnknownElements = + a.childNodes.length == 1 || + (function () { // assign a false positive if unable to shiv - (document.createElement)('a'); + document.createElement('a'); var frag = document.createDocumentFragment(); return ( typeof frag.cloneNode == 'undefined' || typeof frag.createDocumentFragment == 'undefined' || typeof frag.createElement == 'undefined' ); - }()); - } catch(e) { + })(); + } catch (e) { // assign a false positive if detection fails => unable to shiv supportsHtml5Styles = true; supportsUnknownElements = true; } - - }()); + })(); /*--------------------------------------------------------------------------*/ @@ -70,7 +72,7 @@ */ function addStyleSheet(ownerDocument, cssText) { var p = ownerDocument.createElement('p'), - parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; + parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; p.innerHTML = 'x'; return parent.insertBefore(p.lastChild, parent.firstChild); @@ -94,17 +96,17 @@ */ function addElements(newElements, ownerDocument) { var elements = html5.elements; - if(typeof elements != 'string'){ + if (typeof elements != 'string') { elements = elements.join(' '); } - if(typeof newElements != 'string'){ + if (typeof newElements != 'string') { newElements = newElements.join(' '); } - html5.elements = elements +' '+ newElements; + html5.elements = elements + ' ' + newElements; shivDocument(ownerDocument); } - /** + /** * Returns the data associated to the given document * @private * @param {Document} ownerDocument The document. @@ -113,10 +115,10 @@ function getExpandoData(ownerDocument) { var data = expandoData[ownerDocument[expando]]; if (!data) { - data = {}; - expanID++; - ownerDocument[expando] = expanID; - expandoData[expanID] = data; + data = {}; + expanID++; + ownerDocument[expando] = expanID; + expandoData[expanID] = data; } return data; } @@ -128,24 +130,24 @@ * @param {Document|DocumentFragment} ownerDocument The context document. * @returns {Object} The shived element. */ - function createElement(nodeName, ownerDocument, data){ + function createElement(nodeName, ownerDocument, data) { if (!ownerDocument) { - ownerDocument = document; + ownerDocument = document; } - if(supportsUnknownElements){ - return ownerDocument.createElement(nodeName); + if (supportsUnknownElements) { + return ownerDocument.createElement(nodeName); } if (!data) { - data = getExpandoData(ownerDocument); + data = getExpandoData(ownerDocument); } var node; if (data.cache[nodeName]) { - node = data.cache[nodeName].cloneNode(); + node = data.cache[nodeName].cloneNode(); } else if (saveClones.test(nodeName)) { - node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); + node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); } else { - node = data.createElem(nodeName); + node = data.createElem(nodeName); } // Avoid adding some elements to fragments in IE < 9 because @@ -164,20 +166,20 @@ * @param {Document} ownerDocument The context document. * @returns {Object} The shived DocumentFragment. */ - function createDocumentFragment(ownerDocument, data){ + function createDocumentFragment(ownerDocument, data) { if (!ownerDocument) { - ownerDocument = document; + ownerDocument = document; } - if(supportsUnknownElements){ - return ownerDocument.createDocumentFragment(); + if (supportsUnknownElements) { + return ownerDocument.createDocumentFragment(); } data = data || getExpandoData(ownerDocument); var clone = data.frag.cloneNode(), - i = 0, - elems = getElements(), - l = elems.length; - for(;i>> 0); + var dataScope = 'data-scope-' + ((Math.random() * 1e9) >>> 0); var proto = Element.prototype; var querySelector = proto.querySelector; var querySelectorAll = proto.querySelectorAll; @@ -732,80 +684,76 @@ node.setAttribute(dataScope, null); var result = method.call( node, - String(css).replace( - /(^|,\s*)(:scope([ >]|$))/g, - function ($0, $1, $2, $3) { - return $1 + '[' + dataScope + ']' + ($3 || ' '); - } - ) + String(css).replace(/(^|,\s*)(:scope([ >]|$))/g, function ($0, $1, $2, $3) { + return $1 + '[' + dataScope + ']' + ($3 || ' '); + }) ); node.removeAttribute(dataScope); return result; } - }()); + })(); } -}(window)); -(function (global){'use strict'; +})(window); +(function (global) { + 'use strict'; // a WeakMap fallback for DOM nodes only used as key - var DOMMap = global.WeakMap || (function () { + var DOMMap = + global.WeakMap || + (function () { + var counter = 0, + dispatched = false, + drop = false, + value; - var - counter = 0, - dispatched = false, - drop = false, - value - ; - - function dispatch(key, ce, shouldDrop) { - drop = shouldDrop; - dispatched = false; - value = undefined; - key.dispatchEvent(ce); - } - - function Handler(value) { - this.value = value; - } - - Handler.prototype.handleEvent = function handleEvent(e) { - dispatched = true; - if (drop) { - e.currentTarget.removeEventListener(e.type, this, false); - } else { - value = this.value; - } - }; - - function DOMMap() { - counter++; // make id clashing highly improbable - this.__ce__ = new Event(('@DOMMap:' + counter) + Math.random()); - } - - DOMMap.prototype = { - 'constructor': DOMMap, - 'delete': function del(key) { - return dispatch(key, this.__ce__, true), dispatched; - }, - 'get': function get(key) { - dispatch(key, this.__ce__, false); - var v = value; + function dispatch(key, ce, shouldDrop) { + drop = shouldDrop; + dispatched = false; value = undefined; - return v; - }, - 'has': function has(key) { - return dispatch(key, this.__ce__, false), dispatched; - }, - 'set': function set(key, value) { - dispatch(key, this.__ce__, true); - key.addEventListener(this.__ce__.type, new Handler(value), false); - return this; - }, - }; + key.dispatchEvent(ce); + } - return DOMMap; + function Handler(value) { + this.value = value; + } - }()); + Handler.prototype.handleEvent = function handleEvent(e) { + dispatched = true; + if (drop) { + e.currentTarget.removeEventListener(e.type, this, false); + } else { + value = this.value; + } + }; + + function DOMMap() { + counter++; // make id clashing highly improbable + this.__ce__ = new Event('@DOMMap:' + counter + Math.random()); + } + + DOMMap.prototype = { + 'constructor': DOMMap, + 'delete': function del(key) { + return dispatch(key, this.__ce__, true), dispatched; + }, + 'get': function get(key) { + dispatch(key, this.__ce__, false); + var v = value; + value = undefined; + return v; + }, + 'has': function has(key) { + return dispatch(key, this.__ce__, false), dispatched; + }, + 'set': function set(key, value) { + dispatch(key, this.__ce__, true); + key.addEventListener(this.__ce__.type, new Handler(value), false); + return this; + }, + }; + + return DOMMap; + })(); function Dict() {} Dict.prototype = (Object.create || Object)(null); @@ -815,11 +763,7 @@ function createEventListener(type, callback, options) { function eventListener(e) { if (eventListener.once) { - e.currentTarget.removeEventListener( - e.type, - callback, - eventListener - ); + e.currentTarget.removeEventListener(e.type, callback, eventListener); eventListener.removed = true; } if (eventListener.passive) { @@ -847,38 +791,36 @@ createEventListener.preventDefault = function preventDefault() {}; - var - Event = global.CustomEvent, + var Event = global.CustomEvent, dE = global.dispatchEvent, aEL = global.addEventListener, rEL = global.removeEventListener, counter = 0, - increment = function () { counter++; }, - indexOf = [].indexOf || function indexOf(value){ - var length = this.length; - while(length--) { - if (this[length] === value) { - break; + increment = function () { + counter++; + }, + indexOf = + [].indexOf || + function indexOf(value) { + var length = this.length; + while (length--) { + if (this[length] === value) { + break; + } } - } - return length; - }, + return length; + }, getListenerKey = function (options) { - return ''.concat( - options.capture ? '1' : '0', - options.passive ? '1' : '0', - options.once ? '1' : '0' - ); + return ''.concat(options.capture ? '1' : '0', options.passive ? '1' : '0', options.once ? '1' : '0'); }, - augment - ; + augment; try { - aEL('_', increment, {once: true}); + aEL('_', increment, { once: true }); dE(new Event('_')); dE(new Event('_')); - rEL('_', increment, {once: true}); - } catch(o_O) {} + rEL('_', increment, { once: true }); + } catch (o_O) {} if (counter !== 1) { (function () { @@ -886,21 +828,22 @@ function createAEL(aEL) { return function addEventListener(type, handler, options) { if (options && typeof options !== 'boolean') { - var - info = dm.get(this), + var info = dm.get(this), key = getListenerKey(options), - i, tmp, wrap - ; + i, + tmp, + wrap; if (!info) dm.set(this, (info = new Dict())); - if (!(type in info)) info[type] = { - handler: [], - wrap: [] - }; + if (!(type in info)) + info[type] = { + handler: [], + wrap: [], + }; tmp = info[type]; i = indexOf.call(tmp.handler, handler); if (i < 0) { i = tmp.handler.push(handler) - 1; - tmp.wrap[i] = (wrap = new Dict()); + tmp.wrap[i] = wrap = new Dict(); } else { wrap = tmp.wrap[i]; } @@ -916,11 +859,12 @@ function createREL(rEL) { return function removeEventListener(type, handler, options) { if (options && typeof options !== 'boolean') { - var - info = dm.get(this), - key, i, tmp, wrap - ; - if (info && (type in info)) { + var info = dm.get(this), + key, + i, + tmp, + wrap; + if (info && type in info) { tmp = info[type]; i = indexOf.call(tmp.handler, handler); if (-1 < i) { @@ -960,11 +904,9 @@ augment(global.Text); augment(global.Element || global.HTMLElement); augment(global.HTMLDocument); - augment(global.Window || {prototype:global}); + augment(global.Window || { prototype: global }); augment(global.XMLHttpRequest); } - - }()); + })(); } - -}(window)); +})(window); diff --git a/tgui/packages/tgui-polyfill/03-css-om.js b/tgui/packages/tgui-polyfill/03-css-om.js index 757d14f928..534265e6f7 100644 --- a/tgui/packages/tgui-polyfill/03-css-om.js +++ b/tgui/packages/tgui-polyfill/03-css-om.js @@ -9,7 +9,7 @@ */ /* eslint-disable */ -(function(Proto) { +(function (Proto) { 'use strict'; if (typeof Proto.setAttribute !== 'undefined') { @@ -40,5 +40,4 @@ return value; }; } - })(CSSStyleDeclaration.prototype); diff --git a/tgui/packages/tgui-polyfill/10-misc.js b/tgui/packages/tgui-polyfill/10-misc.js index 5a1849e135..f2d69f288c 100644 --- a/tgui/packages/tgui-polyfill/10-misc.js +++ b/tgui/packages/tgui-polyfill/10-misc.js @@ -9,23 +9,24 @@ 'use strict'; // Necessary polyfill to make Webpack code splitting work on IE8 - if (!Function.prototype.bind) (function () { - var slice = Array.prototype.slice; - Function.prototype.bind = function () { - var thatFunc = this, thatArg = arguments[0]; - var args = slice.call(arguments, 1); - if (typeof thatFunc !== 'function') { - // closest thing possible to the ECMAScript 5 - // internal IsCallable function - throw new TypeError('Function.prototype.bind - ' + - 'what is trying to be bound is not callable'); - } - return function () { - var funcArgs = args.concat(slice.call(arguments)) - return thatFunc.apply(thatArg, funcArgs); + if (!Function.prototype.bind) + (function () { + var slice = Array.prototype.slice; + Function.prototype.bind = function () { + var thatFunc = this, + thatArg = arguments[0]; + var args = slice.call(arguments, 1); + if (typeof thatFunc !== 'function') { + // closest thing possible to the ECMAScript 5 + // internal IsCallable function + throw new TypeError('Function.prototype.bind - ' + 'what is trying to be bound is not callable'); + } + return function () { + var funcArgs = args.concat(slice.call(arguments)); + return thatFunc.apply(thatArg, funcArgs); + }; }; - }; - })(); + })(); if (!Array.prototype['forEach']) { Array.prototype.forEach = function (callback, thisArg) { @@ -35,7 +36,7 @@ var T, k; var O = Object(this); var len = O.length >>> 0; - if (typeof callback !== "function") { + if (typeof callback !== 'function') { throw new TypeError(callback + ' is not a function'); } if (arguments.length > 1) { @@ -57,5 +58,4 @@ if (!window.Int32Array) { window.Int32Array = Array; } - })(); diff --git a/tgui/packages/tgui-polyfill/package.json b/tgui/packages/tgui-polyfill/package.json index 85d004bf99..a2f060fcc5 100644 --- a/tgui/packages/tgui-polyfill/package.json +++ b/tgui/packages/tgui-polyfill/package.json @@ -11,6 +11,6 @@ "unfetch": "^4.2.0" }, "devDependencies": { - "terser": "^5.13.1" + "terser": "^5.14.2" } } diff --git a/tgui/packages/tgui/assets.js b/tgui/packages/tgui/assets.js index db6dd635c0..f41181e078 100644 --- a/tgui/packages/tgui/assets.js +++ b/tgui/packages/tgui/assets.js @@ -7,11 +7,9 @@ const EXCLUDED_PATTERNS = [/v4shim/i]; const loadedMappings = {}; -export const resolveAsset = name => ( - loadedMappings[name] || name -); +export const resolveAsset = (name) => loadedMappings[name] || name; -export const assetMiddleware = store => next => action => { +export const assetMiddleware = (store) => (next) => (action) => { const { type, payload } = action; if (type === 'asset/stylesheet') { Byond.loadCss(payload); @@ -20,7 +18,7 @@ export const assetMiddleware = store => next => action => { if (type === 'asset/mappings') { for (let name of Object.keys(payload)) { // Skip anything that matches excluded patterns - if (EXCLUDED_PATTERNS.some(regex => regex.test(name))) { + if (EXCLUDED_PATTERNS.some((regex) => regex.test(name))) { continue; } const url = payload[name]; diff --git a/tgui/packages/tgui/backend.ts b/tgui/packages/tgui/backend.ts index 2b3499bfac..8e483ebfe1 100644 --- a/tgui/packages/tgui/backend.ts +++ b/tgui/packages/tgui/backend.ts @@ -62,8 +62,7 @@ export const backendReducer = (state = initialState, action) => { const value = payload.shared[key]; if (value === '') { shared[key] = undefined; - } - else { + } else { shared[key] = JSON.parse(value); } } @@ -115,11 +114,11 @@ export const backendReducer = (state = initialState, action) => { return state; }; -export const backendMiddleware = store => { +export const backendMiddleware = (store) => { let fancyState; let suspendInterval; - return next => action => { + return (next) => (action) => { const { suspended } = selectBackend(store.getState()); const { type, payload } = action; @@ -196,8 +195,7 @@ export const backendMiddleware = store => { }); perf.mark('resume/finish'); if (process.env.NODE_ENV !== 'production') { - logger.log('visible in', - perf.measure('render/finish', 'resume/finish')); + logger.log('visible in', perf.measure('render/finish', 'resume/finish')); } }); } @@ -212,9 +210,7 @@ export const backendMiddleware = store => { */ export const sendAct = (action: string, payload: object = {}) => { // Validate that payload is an object - const isObject = typeof payload === 'object' - && payload !== null - && !Array.isArray(payload); + const isObject = typeof payload === 'object' && payload !== null && !Array.isArray(payload); if (!isObject) { logger.error(`Payload for act() must be an object, got this:`, payload); return; @@ -224,38 +220,36 @@ export const sendAct = (action: string, payload: object = {}) => { type BackendState = { config: { - title: string, - status: number, - interface: string, - refreshing: boolean, + title: string; + status: number; + interface: string; + refreshing: boolean; window: { - key: string, - size: [number, number], - fancy: boolean, - locked: boolean, - }, + key: string; + size: [number, number]; + fancy: boolean; + locked: boolean; + }; client: { - ckey: string, - address: string, - computer_id: string, - }, + ckey: string; + address: string; + computer_id: string; + }; user: { - name: string, - observer: number, - }, - }, - data: TData, - shared: Record, - suspending: boolean, - suspended: boolean, + name: string; + observer: number; + }; + }; + data: TData; + shared: Record; + suspending: boolean; + suspended: boolean; }; /** * Selects a backend-related slice of Redux state */ -export const selectBackend = (state: any): BackendState => ( - state.backend || {} -); +export const selectBackend = (state: any): BackendState => state.backend || {}; /** * Get data from tgui backend. @@ -289,28 +283,20 @@ type StateWithSetter = [T, (nextState: T) => void]; * @param key Key which uniquely identifies this state in Redux store. * @param initialState Initializes your global variable with this value. */ -export const useLocalState = ( - context: any, - key: string, - initialState: T, -): StateWithSetter => { +export const useLocalState = (context: any, key: string, initialState: T): StateWithSetter => { const { store } = context; const state = selectBackend(store.getState()); const sharedStates = state.shared ?? {}; - const sharedState = (key in sharedStates) - ? sharedStates[key] - : initialState; + const sharedState = key in sharedStates ? sharedStates[key] : initialState; return [ sharedState, - nextState => { - store.dispatch(backendSetSharedState({ - key, - nextState: ( - typeof nextState === 'function' - ? nextState(sharedState) - : nextState - ), - })); + (nextState) => { + store.dispatch( + backendSetSharedState({ + key, + nextState: typeof nextState === 'function' ? nextState(sharedState) : nextState, + }) + ); }, ]; }; @@ -329,28 +315,18 @@ export const useLocalState = ( * @param key Key which uniquely identifies this state in Redux store. * @param initialState Initializes your global variable with this value. */ -export const useSharedState = ( - context: any, - key: string, - initialState: T, -): StateWithSetter => { +export const useSharedState = (context: any, key: string, initialState: T): StateWithSetter => { const { store } = context; const state = selectBackend(store.getState()); const sharedStates = state.shared ?? {}; - const sharedState = (key in sharedStates) - ? sharedStates[key] - : initialState; + const sharedState = key in sharedStates ? sharedStates[key] : initialState; return [ sharedState, - nextState => { + (nextState) => { Byond.sendMessage({ type: 'setSharedState', key, - value: JSON.stringify( - typeof nextState === 'function' - ? nextState(sharedState) - : nextState - ) || '', + value: JSON.stringify(typeof nextState === 'function' ? nextState(sharedState) : nextState) || '', }); }, ]; diff --git a/tgui/packages/tgui/components/AnimatedNumber.js b/tgui/packages/tgui/components/AnimatedNumber.js index 05b89c96d0..0258609e58 100644 --- a/tgui/packages/tgui/components/AnimatedNumber.js +++ b/tgui/packages/tgui/components/AnimatedNumber.js @@ -10,10 +10,8 @@ import { Component } from 'inferno'; const FPS = 20; const Q = 0.5; -const isSafeNumber = value => { - return typeof value === 'number' - && Number.isFinite(value) - && !Number.isNaN(value); +const isSafeNumber = (value) => { + return typeof value === 'number' && Number.isFinite(value) && !Number.isNaN(value); }; export class AnimatedNumber extends Component { diff --git a/tgui/packages/tgui/components/Autofocus.tsx b/tgui/packages/tgui/components/Autofocus.tsx index f5ae00650a..28945dd7aa 100644 --- a/tgui/packages/tgui/components/Autofocus.tsx +++ b/tgui/packages/tgui/components/Autofocus.tsx @@ -1,4 +1,4 @@ -import { Component, createRef } from "inferno"; +import { Component, createRef } from 'inferno'; export class Autofocus extends Component { ref = createRef(); diff --git a/tgui/packages/tgui/components/Blink.js b/tgui/packages/tgui/components/Blink.js index 1f1fd90831..f81ecef8b4 100644 --- a/tgui/packages/tgui/components/Blink.js +++ b/tgui/packages/tgui/components/Blink.js @@ -12,10 +12,7 @@ export class Blink extends Component { } createTimer() { - const { - interval = DEFAULT_BLINKING_INTERVAL, - time = DEFAULT_BLINKING_TIME, - } = this.props; + const { interval = DEFAULT_BLINKING_INTERVAL, time = DEFAULT_BLINKING_TIME } = this.props; clearInterval(this.interval); clearTimeout(this.timer); @@ -42,8 +39,7 @@ export class Blink extends Component { } componentDidUpdate(prevProps) { - if (prevProps.interval !== this.props.interval - || prevProps.time !== this.props.time) { + if (prevProps.interval !== this.props.interval || prevProps.time !== this.props.time) { this.createTimer(); } } @@ -55,9 +51,10 @@ export class Blink extends Component { render(props) { return ( - + {props.children} ); diff --git a/tgui/packages/tgui/components/BlockQuote.js b/tgui/packages/tgui/components/BlockQuote.js index 62a0521572..8c0f53a46a 100644 --- a/tgui/packages/tgui/components/BlockQuote.js +++ b/tgui/packages/tgui/components/BlockQuote.js @@ -7,14 +7,7 @@ import { classes } from 'common/react'; import { Box } from './Box'; -export const BlockQuote = props => { +export const BlockQuote = (props) => { const { className, ...rest } = props; - return ( - - ); + return ; }; diff --git a/tgui/packages/tgui/components/Box.tsx b/tgui/packages/tgui/components/Box.tsx index bcd8447c8b..441ec43cac 100644 --- a/tgui/packages/tgui/components/Box.tsx +++ b/tgui/packages/tgui/components/Box.tsx @@ -60,17 +60,17 @@ export interface BoxProps { backgroundColor?: string | BooleanLike; // VOREStation Addition Start // Flex props - order?: string | BooleanLike, - flexDirection?: string | BooleanLike, - flexGrow?: string | BooleanLike, - flexShrink?: string | BooleanLike, - flexWrap?: string | BooleanLike, - flexFlow?: string | BooleanLike, - flexBasis?: string | BooleanLike, - flex?: string | BooleanLike, - alignItems?: string | BooleanLike, - justifyContent?: string | BooleanLike, - alignSelf?: string | BooleanLike, + order?: string | BooleanLike; + flexDirection?: string | BooleanLike; + flexGrow?: string | BooleanLike; + flexShrink?: string | BooleanLike; + flexWrap?: string | BooleanLike; + flexFlow?: string | BooleanLike; + flexBasis?: string | BooleanLike; + flex?: string | BooleanLike; + alignItems?: string | BooleanLike; + justifyContent?: string | BooleanLike; + alignSelf?: string | BooleanLike; // VOREStation Addition End fillPositionedParent?: boolean; } @@ -109,10 +109,10 @@ export const halfUnit = (value: unknown): string | undefined => { const isColorCode = (str: unknown) => !isColorClass(str); const isColorClass = (str: unknown): boolean => { - return typeof str === "string" && CSS_COLORS.includes(str); + return typeof str === 'string' && CSS_COLORS.includes(str); }; -const mapRawPropTo = attrName => (style, value) => { +const mapRawPropTo = (attrName) => (style, value) => { if (typeof value === 'number' || typeof value === 'string') { style[attrName] = value; } @@ -138,7 +138,7 @@ const mapDirectionalUnitPropTo = (attrName, unit, dirs) => (style, value) => { } }; -const mapColorPropTo = attrName => (style, value) => { +const mapColorPropTo = (attrName) => (style, value) => { if (isColorCode(value)) { style[attrName] = value; } @@ -165,8 +165,7 @@ const styleMapperByPropName = { lineHeight: (style, value) => { if (typeof value === 'number') { style['line-height'] = value; - } - else if (typeof value === 'string') { + } else if (typeof value === 'string') { style['line-height'] = unit(value); } }, @@ -182,29 +181,17 @@ const styleMapperByPropName = { nowrap: mapBooleanPropTo('white-space', 'nowrap'), preserveWhitespace: mapBooleanPropTo('white-space', 'pre-wrap'), // Margins - m: mapDirectionalUnitPropTo('margin', halfUnit, [ - 'top', 'bottom', 'left', 'right', - ]), - mx: mapDirectionalUnitPropTo('margin', halfUnit, [ - 'left', 'right', - ]), - my: mapDirectionalUnitPropTo('margin', halfUnit, [ - 'top', 'bottom', - ]), + m: mapDirectionalUnitPropTo('margin', halfUnit, ['top', 'bottom', 'left', 'right']), + mx: mapDirectionalUnitPropTo('margin', halfUnit, ['left', 'right']), + my: mapDirectionalUnitPropTo('margin', halfUnit, ['top', 'bottom']), mt: mapUnitPropTo('margin-top', halfUnit), mb: mapUnitPropTo('margin-bottom', halfUnit), ml: mapUnitPropTo('margin-left', halfUnit), mr: mapUnitPropTo('margin-right', halfUnit), // Margins - p: mapDirectionalUnitPropTo('padding', halfUnit, [ - 'top', 'bottom', 'left', 'right', - ]), - px: mapDirectionalUnitPropTo('padding', halfUnit, [ - 'left', 'right', - ]), - py: mapDirectionalUnitPropTo('padding', halfUnit, [ - 'top', 'bottom', - ]), + p: mapDirectionalUnitPropTo('padding', halfUnit, ['top', 'bottom', 'left', 'right']), + px: mapDirectionalUnitPropTo('padding', halfUnit, ['left', 'right']), + py: mapDirectionalUnitPropTo('padding', halfUnit, ['top', 'bottom']), pt: mapUnitPropTo('padding-top', halfUnit), pb: mapUnitPropTo('padding-bottom', halfUnit), pl: mapUnitPropTo('padding-left', halfUnit), @@ -256,8 +243,7 @@ export const computeBoxProps = (props: BoxProps) => { const mapPropToStyle = styleMapperByPropName[propName]; if (mapPropToStyle) { mapPropToStyle(computedStyles, propValue); - } - else { + } else { computedProps[propName] = propValue; } } @@ -289,19 +275,13 @@ export const computeBoxClassName = (props: BoxProps) => { }; export const Box: SFC = (props: BoxProps) => { - const { - as = 'div', - className, - children, - ...rest - } = props; + const { as = 'div', className, children, ...rest } = props; // Render props if (typeof children === 'function') { return children(computeBoxProps(props)); } - const computedClassName = typeof className === 'string' - ? className + ' ' + computeBoxClassName(rest) - : computeBoxClassName(rest); + const computedClassName = + typeof className === 'string' ? className + ' ' + computeBoxClassName(rest) : computeBoxClassName(rest); const computedProps = computeBoxProps(rest); // Render a wrapper element return createVNode( @@ -311,7 +291,7 @@ export const Box: SFC = (props: BoxProps) => { children, ChildFlags.UnknownChildren, computedProps, - undefined, + undefined ); }; diff --git a/tgui/packages/tgui/components/Button.js b/tgui/packages/tgui/components/Button.js index 58c3dc7697..05abfc39ee 100644 --- a/tgui/packages/tgui/components/Button.js +++ b/tgui/packages/tgui/components/Button.js @@ -14,7 +14,7 @@ import { Tooltip } from './Tooltip'; const logger = createLogger('Button'); -export const Button = props => { +export const Button = (props) => { const { className, fluid, @@ -42,12 +42,13 @@ export const Button = props => { // A warning about the lowercase onclick if (onclick) { logger.warn( - `Lowercase 'onclick' is not supported on Button and lowercase` - + ` prop names are discouraged in general. Please use a camelCase` - + `'onClick' instead and read: ` - + `https://infernojs.org/docs/guides/event-handling`); + `Lowercase 'onclick' is not supported on Button and lowercase` + + ` prop names are discouraged in general. Please use a camelCase` + + `'onClick' instead and read: ` + + `https://infernojs.org/docs/guides/event-handling` + ); } - rest.onClick = e => { + rest.onClick = (e) => { if (!disabled && onClick) { onClick(e); } @@ -68,14 +69,12 @@ export const Button = props => { circular && 'Button--circular', compact && 'Button--compact', iconPosition && 'Button--iconPosition--' + iconPosition, - (color && typeof color === 'string') - ? 'Button--color--' + color - : 'Button--color--default', + color && typeof color === 'string' ? 'Button--color--' + color : 'Button--color--default', className, computeBoxClassName(rest), ])} tabIndex={!disabled && '0'} - onKeyDown={e => { + onKeyDown={(e) => { if (props.captureKeys === false) { return; } @@ -96,16 +95,12 @@ export const Button = props => { } }} {...computeBoxProps(rest)}> - {(icon && iconPosition !== 'right') && ( - + {icon && iconPosition !== 'right' && ( + )} {content} {children} - {(icon && iconPosition === 'right') && ( + {icon && iconPosition === 'right' && ( { Button.defaultHooks = pureComponentHooks; -export const ButtonCheckbox = props => { +export const ButtonCheckbox = (props) => { const { checked, ...rest } = props; - return ( - - {buttons && ( -
    - {buttons} -
    - )} + {buttons &&
    {buttons}
    } - {open && ( - - {children} - - )} + {open && {children}}
    ); } diff --git a/tgui/packages/tgui/components/ColorBox.js b/tgui/packages/tgui/components/ColorBox.js index 10306cf465..641e5fa751 100644 --- a/tgui/packages/tgui/components/ColorBox.js +++ b/tgui/packages/tgui/components/ColorBox.js @@ -7,25 +7,12 @@ import { classes, pureComponentHooks } from 'common/react'; import { computeBoxClassName, computeBoxProps } from './Box'; -export const ColorBox = props => { - const { - content, - children, - className, - color, - backgroundColor, - ...rest - } = props; +export const ColorBox = (props) => { + const { content, children, className, color, backgroundColor, ...rest } = props; rest.color = content ? null : 'transparent'; rest.backgroundColor = color || backgroundColor; return ( -
    +
    {content || '.'}
    ); diff --git a/tgui/packages/tgui/components/Dimmer.js b/tgui/packages/tgui/components/Dimmer.js index d97c3626a3..85e046ca0d 100644 --- a/tgui/packages/tgui/components/Dimmer.js +++ b/tgui/packages/tgui/components/Dimmer.js @@ -7,18 +7,11 @@ import { classes } from 'common/react'; import { Box } from './Box'; -export const Dimmer = props => { +export const Dimmer = (props) => { const { className, children, ...rest } = props; return ( - -
    - {children} -
    + +
    {children}
    ); }; diff --git a/tgui/packages/tgui/components/Divider.js b/tgui/packages/tgui/components/Divider.js index b533842826..8cbf9b77d7 100644 --- a/tgui/packages/tgui/components/Divider.js +++ b/tgui/packages/tgui/components/Divider.js @@ -6,19 +6,15 @@ import { classes } from 'common/react'; -export const Divider = props => { - const { - vertical, - hidden, - } = props; +export const Divider = (props) => { + const { vertical, hidden } = props; return ( - )); + ); } // VOREStation addition end return ops.length ? ops : 'No Options Found'; @@ -93,24 +92,20 @@ export class Dropdown extends Component { placeholder, // VOREStation Addition ...boxProps } = props; - const { - className, - ...rest - } = boxProps; + const { className, ...rest } = boxProps; const adjustedOpen = over ? !this.state.open : this.state.open; const menu = this.state.open ? (
    { this.menuRef = menu; }} + ref={(menu) => { + this.menuRef = menu; + }} tabIndex="-1" style={{ 'width': width, }} - className={classes([ - noscroll && 'Dropdown__menu-noscroll' || 'Dropdown__menu', - over && 'Dropdown__over', - ])}> + className={classes([(noscroll && 'Dropdown__menu-noscroll') || 'Dropdown__menu', over && 'Dropdown__over'])}> {this.buildMenu()}
    ) : null; @@ -133,15 +128,9 @@ export class Dropdown extends Component { } this.setOpen(!this.state.open); }}> - {icon && ( - - )} + {icon && } - {displayText ? displayText : (this.state.selected || placeholder) /* VOREStation Edit */ } + {displayText ? displayText : this.state.selected || placeholder /* VOREStation Edit */} {!!nochevron || ( diff --git a/tgui/packages/tgui/components/Flex.tsx b/tgui/packages/tgui/components/Flex.tsx index 95379ea587..915047bd9c 100644 --- a/tgui/packages/tgui/components/Flex.tsx +++ b/tgui/packages/tgui/components/Flex.tsx @@ -50,17 +50,9 @@ export const computeFlexProps = (props: FlexProps) => { }); }; -export const Flex = props => { +export const Flex = (props) => { const { className, ...rest } = props; - return ( -
    - ); + return
    ; }; Flex.defaultHooks = pureComponentHooks; @@ -74,11 +66,7 @@ export type FlexItemProps = BoxProps & { }; export const computeFlexItemClassName = (props: FlexItemProps) => { - return classes([ - 'Flex__item', - Byond.IS_LTE_IE10 && 'Flex__item--iefix', - computeBoxClassName(props), - ]); + return classes(['Flex__item', Byond.IS_LTE_IE10 && 'Flex__item--iefix', computeBoxClassName(props)]); }; export const computeFlexItemProps = (props: FlexItemProps) => { @@ -107,15 +95,11 @@ export const computeFlexItemProps = (props: FlexItemProps) => { }); }; -const FlexItem = props => { +const FlexItem = (props) => { const { className, ...rest } = props; return (
    ); diff --git a/tgui/packages/tgui/components/Grid.js b/tgui/packages/tgui/components/Grid.js index 3269b67200..7ad3fd1dfd 100644 --- a/tgui/packages/tgui/components/Grid.js +++ b/tgui/packages/tgui/components/Grid.js @@ -8,13 +8,11 @@ import { Table } from './Table'; import { pureComponentHooks } from 'common/react'; /** @deprecated */ -export const Grid = props => { +export const Grid = (props) => { const { children, ...rest } = props; return (
    Installed Personality:[pai.name][pai.name]
    Integrity: [pai.health]
    Prime directive:
    - - {children} - + {children}
    ); }; @@ -22,7 +20,7 @@ export const Grid = props => { Grid.defaultHooks = pureComponentHooks; /** @deprecated */ -export const GridColumn = props => { +export const GridColumn = (props) => { const { size = 1, style, ...rest } = props; return ( { width: size + '%', ...style, }} - {...rest} /> + {...rest} + /> ); }; diff --git a/tgui/packages/tgui/components/Icon.js b/tgui/packages/tgui/components/Icon.js index 98a40bf5d9..ef02b1059d 100644 --- a/tgui/packages/tgui/components/Icon.js +++ b/tgui/packages/tgui/components/Icon.js @@ -11,22 +11,14 @@ import { computeBoxClassName, computeBoxProps } from './Box'; const FA_OUTLINE_REGEX = /-o$/; -export const Icon = props => { - const { - name, - size, - spin, - className, - rotation, - inverse, - ...rest - } = props; +export const Icon = (props) => { + const { name, size, spin, className, rotation, inverse, ...rest } = props; if (size) { if (!rest.style) { rest.style = {}; } - rest.style['font-size'] = (size * 100) + '%'; + rest.style['font-size'] = size * 100 + '%'; } if (typeof rotation === 'number') { if (!rest.style) { @@ -37,44 +29,25 @@ export const Icon = props => { const boxProps = computeBoxProps(rest); - let iconClass = ""; - if (name.startsWith("tg-")) { + let iconClass = ''; + if (name.startsWith('tg-')) { // tgfont icon iconClass = name; } else { // font awesome icon const faRegular = FA_OUTLINE_REGEX.test(name); const faName = name.replace(FA_OUTLINE_REGEX, ''); - iconClass = (faRegular ? 'far ' : 'fas ') + 'fa-'+ faName + (spin ? " fa-spin" : ""); + iconClass = (faRegular ? 'far ' : 'fas ') + 'fa-' + faName + (spin ? ' fa-spin' : ''); } - return ( - - ); + return ; }; Icon.defaultHooks = pureComponentHooks; -export const IconStack = props => { - const { - className, - children, - ...rest - } = props; +export const IconStack = (props) => { + const { className, children, ...rest } = props; return ( - + {children} ); diff --git a/tgui/packages/tgui/components/InfinitePlane.js b/tgui/packages/tgui/components/InfinitePlane.js index 55273137bb..a14c478156 100644 --- a/tgui/packages/tgui/components/InfinitePlane.js +++ b/tgui/packages/tgui/components/InfinitePlane.js @@ -1,7 +1,7 @@ -import { computeBoxProps } from "./Box"; -import { Stack } from "./Stack"; -import { ProgressBar } from "./ProgressBar"; -import { Button } from "./Button"; +import { computeBoxProps } from './Box'; +import { Stack } from './Stack'; +import { ProgressBar } from './ProgressBar'; +import { Button } from './Button'; import { Component } from 'inferno'; const ZOOM_MIN_VAL = 0.5; @@ -33,19 +33,19 @@ export class InfinitePlane extends Component { } componentDidMount() { - window.addEventListener("mouseup", this.onMouseUp); + window.addEventListener('mouseup', this.onMouseUp); - window.addEventListener("mousedown", this.doOffsetMouse); - window.addEventListener("mousemove", this.doOffsetMouse); - window.addEventListener("mouseup", this.doOffsetMouse); + window.addEventListener('mousedown', this.doOffsetMouse); + window.addEventListener('mousemove', this.doOffsetMouse); + window.addEventListener('mouseup', this.doOffsetMouse); } componentWillUnmount() { - window.removeEventListener("mouseup", this.onMouseUp); + window.removeEventListener('mouseup', this.onMouseUp); - window.removeEventListener("mousedown", this.doOffsetMouse); - window.removeEventListener("mousemove", this.doOffsetMouse); - window.removeEventListener("mouseup", this.doOffsetMouse); + window.removeEventListener('mousedown', this.doOffsetMouse); + window.removeEventListener('mousemove', this.doOffsetMouse); + window.removeEventListener('mouseup', this.doOffsetMouse); } doOffsetMouse(event) { @@ -82,17 +82,8 @@ export class InfinitePlane extends Component { } render() { - const { - children, - backgroundImage, - imageWidth, - ...rest - } = this.props; - const { - left, - top, - zoom, - } = this.state; + const { children, backgroundImage, imageWidth, ...rest } = this.props; + const { left, top, zoom } = this.state; return (
    + })}>
    + 'position': 'fixed', + 'transform': `translate(${left}px, ${top}px) scale(${zoom})`, + 'transform-origin': 'top left', + 'height': '100%', + 'width': '100%', + }}> {children}
    - +
    diff --git a/tgui/packages/tgui/components/LabeledControls.js b/tgui/packages/tgui/components/LabeledControls.js index b4f069192c..2da7efe928 100644 --- a/tgui/packages/tgui/components/LabeledControls.js +++ b/tgui/packages/tgui/components/LabeledControls.js @@ -6,47 +6,23 @@ import { Flex } from './Flex'; -export const LabeledControls = props => { - const { - children, - wrap, - ...rest - } = props; +export const LabeledControls = (props) => { + const { children, wrap, ...rest } = props; return ( - + {children} ); }; -const LabeledControlsItem = props => { - const { - label, - children, - mx = 1, - ...rest - } = props; +const LabeledControlsItem = (props) => { + const { label, children, mx = 1, ...rest } = props; return ( - + - - {children} - - - {label} - + {children} + {label} ); diff --git a/tgui/packages/tgui/components/LabeledList.tsx b/tgui/packages/tgui/components/LabeledList.tsx index 2b52eae5ea..0a06916ee0 100644 --- a/tgui/packages/tgui/components/LabeledList.tsx +++ b/tgui/packages/tgui/components/LabeledList.tsx @@ -15,11 +15,7 @@ type LabeledListProps = { export const LabeledList = (props: LabeledListProps) => { const { children } = props; - return ( - - {children} -
    - ); + return {children}
    ; }; LabeledList.defaultHooks = pureComponentHooks; @@ -31,9 +27,9 @@ type LabeledListItemProps = { color?: string | BooleanLike; textAlign?: string | BooleanLike; verticalAlign?: string | BooleanLike; // VOREStation Addition - buttons?: InfernoNode, + buttons?: InfernoNode; /** @deprecated */ - content?: any, + content?: any; children?: InfernoNode; }; @@ -51,19 +47,12 @@ const LabeledListItem = (props: LabeledListItemProps) => { ...rest // VOREStation Addition } = props; return ( - + + className={classes(['LabeledList__cell', 'LabeledList__label'])}> {label ? label + ':' : null} { color={color} textAlign={textAlign} verticalAlign={verticalAlign} // VOREStation Addition - className={classes([ - 'LabeledList__cell', - 'LabeledList__content', - ])} + className={classes(['LabeledList__cell', 'LabeledList__content'])} colSpan={buttons ? undefined : 2} - {...rest} /* VOREStation Addition*/> + {...rest} /* VOREStation Addition*/ + > {content} {children} - {buttons && ( - - {buttons} - - )} + {buttons && {buttons}} ); }; @@ -96,9 +79,7 @@ type LabeledListDividerProps = { }; const LabeledListDivider = (props: LabeledListDividerProps) => { - const padding = props.size - ? unit(Math.max(0, props.size - 1)) - : 0; + const padding = props.size ? unit(Math.max(0, props.size - 1)) : 0; return ( { +export const Modal = (props) => { const { className, children, @@ -18,7 +18,7 @@ export const Modal = props => { // VOREStation Addition Start let handleKeyDown; if (onEnter) { - handleKeyDown = e => { + handleKeyDown = (e) => { let key = e.which || e.keyCode; if (key === 13) { onEnter(e); @@ -27,15 +27,8 @@ export const Modal = props => { } // VOREStation Addition End return ( - -
    + +
    {children}
    diff --git a/tgui/packages/tgui/components/NanoMap.js b/tgui/packages/tgui/components/NanoMap.js index 888e590d1d..6bb4c49592 100644 --- a/tgui/packages/tgui/components/NanoMap.js +++ b/tgui/packages/tgui/components/NanoMap.js @@ -1,10 +1,14 @@ import { Component } from 'inferno'; import { Box, Button, Icon, Tooltip, LabeledList, Slider } from '.'; -import { useBackend } from "../backend"; +import { useBackend } from '../backend'; -const pauseEvent = e => { - if (e.stopPropagation) { e.stopPropagation(); } - if (e.preventDefault) { e.preventDefault(); } +const pauseEvent = (e) => { + if (e.stopPropagation) { + e.stopPropagation(); + } + if (e.preventDefault) { + e.preventDefault(); + } e.cancelBubble = true; e.returnValue = false; return false; @@ -17,8 +21,8 @@ export class NanoMap extends Component { super(props); // Auto center based on window size - const Xcenter = (window.innerWidth / 2) - 256; - const Ycenter = (window.innerHeight / 2) - 256; + const Xcenter = window.innerWidth / 2 - 256; + const Ycenter = window.innerHeight / 2 - 256; this.state = { offsetX: Xcenter, @@ -31,7 +35,7 @@ export class NanoMap extends Component { }; // Dragging - this.handleDragStart = e => { + this.handleDragStart = (e) => { this.ref = e.target; this.setState({ dragging: false, @@ -43,8 +47,8 @@ export class NanoMap extends Component { pauseEvent(e); }; - this.handleDragMove = e => { - this.setState(prevState => { + this.handleDragMove = (e) => { + this.setState((prevState) => { const state = { ...prevState }; const newOffsetX = e.screenX - state.originX; const newOffsetY = e.screenY - state.originY; @@ -61,7 +65,7 @@ export class NanoMap extends Component { pauseEvent(e); }; - this.handleDragEnd = e => { + this.handleDragEnd = (e) => { this.setState({ dragging: false, originX: null, @@ -72,30 +76,38 @@ export class NanoMap extends Component { pauseEvent(e); }; - this.handleOnClick = e => { - let byondX = (e.offsetX/this.state.zoom)/zoomScale; - let byondY = 1-(e.offsetY/this.state.zoom)/zoomScale; // Byond origin is bottom left, this is top left - + this.handleOnClick = (e) => { + let byondX = e.offsetX / this.state.zoom / zoomScale; + let byondY = 1 - e.offsetY / this.state.zoom / zoomScale; // Byond origin is bottom left, this is top left + e.byondX = byondX; e.byondY = byondY; - if (typeof(this.props.onClick) === "function") { + if (typeof this.props.onClick === 'function') { this.props.onClick(e); } }; - + this.handleZoom = (_e, value) => { - this.setState(state => { + this.setState((state) => { const newZoom = Math.min(Math.max(value, 1), 8); let zoomDiff = (newZoom - state.zoom) * 1.5; state.zoom = newZoom; let newOffsetX = state.offsetX - 262 * zoomDiff; - if (newOffsetX < -500) { newOffsetX = -500; } - if (newOffsetX > 500) { newOffsetX = 500; } - + if (newOffsetX < -500) { + newOffsetX = -500; + } + if (newOffsetX > 500) { + newOffsetX = 500; + } + let newOffsetY = state.offsetY - 256 * zoomDiff; - if (newOffsetY < -200) { newOffsetY = -200; } - if (newOffsetY > 200) { newOffsetY = 200; } + if (newOffsetY < -200) { + newOffsetY = -200; + } + if (newOffsetY > 200) { + newOffsetY = 200; + } state.offsetX = newOffsetX; state.offsetY = newOffsetY; @@ -105,41 +117,34 @@ export class NanoMap extends Component { return state; }); }; - } render() { const { config } = useBackend(this.context); const { dragging, offsetX, offsetY, zoom = 1 } = this.state; const { children } = this.props; - - const mapUrl = config.map + "_nanomap_z" + config.mapZLevel + ".png"; + + const mapUrl = config.map + '_nanomap_z' + config.mapZLevel + '.png'; // (x * zoom), x Needs to be double the turf- map size. (for virgo, 140x140) - const mapSize = (zoomScale * zoom) + 'px'; + const mapSize = zoomScale * zoom + 'px'; const newStyle = { width: mapSize, height: mapSize, - "margin-top": offsetY + "px", - "margin-left": offsetX + "px", - "overflow": "hidden", - "position": "relative", - "background-image": "url(" + mapUrl + ")", - "background-size": "cover", - "background-repeat": "no-repeat", - "text-align": "center", - "cursor": dragging ? "move" : "auto", + 'margin-top': offsetY + 'px', + 'margin-left': offsetX + 'px', + 'overflow': 'hidden', + 'position': 'relative', + 'background-image': 'url(' + mapUrl + ')', + 'background-size': 'cover', + 'background-repeat': 'no-repeat', + 'text-align': 'center', + 'cursor': dragging ? 'move' : 'auto', }; return ( - - - {children} - + + {children} @@ -148,39 +153,27 @@ export class NanoMap extends Component { } const NanoMapMarker = (props, context) => { - const { - x, - y, - zoom = 1, - icon, - tooltip, - color, - onClick, - } = props; + const { x, y, zoom = 1, icon, tooltip, color, onClick } = props; - const handleOnClick = e => { + const handleOnClick = (e) => { pauseEvent(e); if (onClick) { onClick(e); } }; - const rx = ((x * 2 * zoom) - zoom) - 3; - const ry = ((y * 2 * zoom) - zoom) - 3; + const rx = x * 2 * zoom - zoom - 3; + const ry = y * 2 * zoom - zoom - 3; return (
    - +
    @@ -199,7 +192,7 @@ const NanoMapZoomer = (props, context) => { minValue="1" maxValue="8" stepPixelSize="10" - format={v => v + "x"} + format={(v) => v + 'x'} value={props.zoom} onDrag={(e, v) => props.onZoom(e, v)} /> @@ -207,14 +200,15 @@ const NanoMapZoomer = (props, context) => { {data.map_levels .sort((a, b) => Number(a) - Number(b)) - .map(level => ( + .map((level) => (